javascript - NetSuite - Suitelet POST request.files 为空,但文件元数据存在
问题描述
我正在使用 HTML 字符串从外部 Suitelet 的 GET 请求中输出以显示提交表单。该表单有一个文件输入和两个文本输入。文件元数据似乎正在进入 POST,因为我可以通过完整路径 (params.request.files.userfile) 访问 context.request.files.file_name.fileType 和其他字段,但除了这里没有实际内容元数据。我这样说是因为当我尝试记录 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 });
这是 Suitelet 的 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 开发工具中看到从 Form 发送的文件数据:
该文件正在 Netsuite FileCabinet 中创建。只有0个字节。关于我做错了什么的任何线索?
解决方案
Suite answer id 49537、84073和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();
如果您不需要/致力于使用 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);
}
推荐阅读
- javascript - 检查对象数组是否包含另一个对象
- python - 如何为同一个模型设置多个 ModelAdmins 并通过 reverse() 返回一致的管理 url?
- python - peewee 日期时间字段到微秒
- android - 颤振应用程序发布显示错误任务':app:validateSigningRelease'执行失败
- c# - 如何检查某个 uint 是否应用了 0x01000000 掩码?
- react-native - Expo无法连接到android-studio模拟器(Ubuntu 20.04)
- c# - 如何在 c# winform 应用程序中使用来自另一个类的字符串?
- android - 有什么方法可以在不征得许可的情况下存储文本文件?
- twitter-bootstrap - bootstrap 4 的日期格式已更改
- azure-functions - 如何从 Azure Functions 方法而不是属性中查询 CosmosDB