【问题标题】:suitescript: POST an image form the cabinet multipart/form-data套件脚本:从柜子多部分/表单数据中发布图像
【发布时间】:2021-05-01 09:40:18
【问题描述】:

我正在尝试将图像从橱柜发布到 API

API 被拒绝调用 Content-Type": "multipart/form-data:

{ http代码:“405”, httpMessage:“方法不允许”, message: "PUT, POST 需要输入正文。", 错误类:“异常” }

API 被拒绝调用没有 Content-Type": "multipart/form-data:

{ http代码:“400”, httpMessage:“错误请求”, 消息:“JSON 输入无效。错误消息:语法错误”, 错误类:“无效参数异常” }

当前代码是:

function ItemImageCreation(){
var itemId = 4;
var payload;

var StringUrl = "https://someURL";
var boundary = '--' + uuidv4();
var files = file.load(1056); // getting the file
var fileContents = files.getContents(); // getting the content
var decodedStr = fromBaseUTF(fileContents); // conversion to Base64
var form_data = "{\"description\": \"Test Image\",\n\"ordering\": 1\n}";

// add the data field
payload = "\n" + boundary + "\n"
  + 'Content-Disposition: form-data; name=\"data\"\n\n'
  + form_data + "\n"
  + boundary + "\n"
  + 'Content-Disposition: form-data; name=\"image\"\n'
  + 'Content-Type: image/jpeg\n\n'
  + decodedStr + "\n"
  + boundary + "--\n\n";
log.debug("payload", payload);
var Header = {"Authorization": "Bearer " + token,
                        "Content-Type": "multipart/form-data; boundary=" + boundary
                        };
try {
  var response = https.post({
    url: StringUrl,
    body: payload,
    headers: Header
  });
  var newSFID = JSON.parse(response.body);
  log.debug("Item Image creation", newSFID);
} catch (e) {
  log.error({ title: 'Failed to submit file', details: (e.message || e.toString()) + (e.getStackTrace ? (' \n \n' + e.getStackTrace().join(' \n')) : '') });
  log.error('ERROR Item Image Creation', JSON.stringify(e));
}

}

使用邮递员,图像被正确发送:

我正在使用预定的脚本,你看到什么问题了吗?或者有没有办法知道 netsuite 发送了什么?

【问题讨论】:

    标签: multipartform-data netsuite suitescript2.0


    【解决方案1】:

    这里有一个答案:In NetSuite with SuiteScript 2.0 unable to send a file with HTTP POST request with a content-type multipart/form-data

    您缺少的是 Content-Transfer-Encoding 标头,您应该将内容作为 Base64 获取,因此您不需要从 UTF16 转换(我可能错了,但我从来不需要)

    【讨论】:

    • 感谢您的建议,但根据新测试,我在读取文件之前被卡住了,当我添加 "Content-Type": "multipart/form-data; boundary=" + boundary 时,没有发送任何正文。当我使用"Content-Type": "application/x-www-form-urlencoded" 时,会发送正文(但被服务器拒绝)
    • 请注意,您的代码还有很多其他问题。马上,我看到换行符的应用不一致,包括正文上的初始换行符等。示例没有初始换行符,并使用 \r\n 作为 eol 标记。标头中发送的边界不应有前导“---”字符
    • 感谢@bknights,在我们遇到遗体未寄出的问题后,我已向netsuite 提出了问题,这就是答案:我已与我的高级同事调查了您的担忧我们发现 NetSuite 不支持使用“multipart/form-data”内容类型向接受文件流的服务器发送文件的能力。有一些旧案例与这个问题有相同的问题,并且增强功能已经被装箱,但是不幸的是,没有计划在不久的将来实施这一功能的日期。
    • 感谢您的代码,数据已发送,格式很好,谢谢。我仍然遇到一个问题,我不知道它是否与数据或 API 目标的特定性有关:Invalid image type text/plain; charset=us-ascii for facebook.png",当我比较从 netsuite 发送的内容与从邮递员发送的内容时,我没有看到任何区别(我正在使用 pipedream 来检查表单数据)
    猜你喜欢
    • 1970-01-01
    • 2016-04-06
    • 2016-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-31
    • 2019-11-19
    相关资源
    最近更新 更多