NetSuite - Suitelet POST request.files 为空,但文件元数据存在

NetSuite - Suitelet POST request.files is empty but the file metadata is there

我正在使用 HTML 字符串从外部 Suitelet 的 GET 请求输出以显示提交表单。该表单有一个文件输入和 2 个文本输入。文件元数据似乎通过完整路径 (params.request.files.userfile) 访问 POST 和其他字段,但这里除了元数据之外没有实际内容。我这样说是因为当我尝试记录 params.request.files[0] 或 params.request.files.userfile 时,我在日志中得到空字符串。

在文件柜中的 Netsuite 中创建的文件是正确的文件类型和名称,只有内容是空的。

这是我在 Suitelet 的 GET 部分中的表单:

      var html = '<form method="post" enctype="multipart/form-data" accept-charset="utf-8">';
      html += '<input type="text" id="id" name="coolid" value="0"><br>';
      html += '<input type="text" id="token" name="token" value=""><br>';
      html += '<input type="file" id="file" name="file" accept="image/png">';
      html += '<button type="submit">submit</button>';
      html += '</form>';

      params.response.addHeader({
        name: 'Content-Type',
        value: 'text/html; charset=UTF-8'
      });

      params.response.write({ output: html });

这是套件的 POST 部分:

      var fileObj = file.create({
              name: params.request.parameters.coolid+ "_file",
              fileType: params.request.files.userfile.fileType,
              contents: params.request.files[0]
            });

            fileObj.folder = -1;
            fileObj.save();

我可以在 Firefox 开发工具中看到从表单发送的文件数据:

并且正在 Netsuite FileCabinet 中创建文件。只有 0 个字节。关于我做错了什么的任何线索?

Suite answer ids 49537, 84073, and 82126 建议您不需要使用 file.create 方法并且可以通过 ServerRequest.files 属性.

替换:

var fileObj = file.create({
  name: params.request.parameters.customer_ext_id + "_file",
  fileType: params.request.files.userfile.fileType,
  contents: params.request.files[0]
});

fileObj.folder = -4;
fileObj.save();

与:

var newFile = context.request.files['FILE_ID'];
newFile.folder = FOLDER_ID; //folder internal ID
var newFileId = newFile.save();

如果您 required/committed 不习惯使用 html,以下内容也应该有效。

if (context.request.method === 'GET'){
  var form = serverWidget.createForm({
    title: 'Simple Form'
  });
  var field = form.addField({
    id: 'custpage_file',
    type: 'file',
    label: 'Document'
  });
  form.addSubmitButton({
    label: 'Submit Button'
  });
  context.response.writePage(form);
}
if (context.request.method === 'POST')  {
  var newFile = context.request.files.custpage_file;
  newFile.folder = 123;
  var newFileId = newFile.save();
  log.audit('file created', 'file id: '+ newFileId);
}