【发布时间】:2015-11-01 02:28:18
【问题描述】:
我在 hapijs 服务器中有以下路由。我正在尝试使用 ajax 创建一个新文件。
{
method: 'POST',
path: '/create',
config : {
payload:{
maxBytes: 10*1024*1024,
output:'stream',
parse: true,
allow: 'multipart/form-data'
},
handler: function (request, reply) {
var data = request.payload;
if (data.file) { // undefined always
var name = data.file.hapi.filename;
var path = writePath + '/' + name;
var file = fs.createWriteStream(path);
file.on('error', reply);
data.file.pipe(file);
data.file.on('end', function (err) {
reply({
filename: data.file.hapi.filename,
headers: data.file.hapi.headers
});
});
} else reply(boom.badRequest('No file found. Please try again.'));
}
}
上面的代码总是将 data.file 设为未定义。我有什么遗漏吗?
在hapi文档http://hapijs.com/api#requests中,当输出为stream时
'stream' - 传入的有效负载通过 Stream.Readable 接口。如果有效负载是“multipart/form-data”并且 parse 为真,字段值显示为文本,而文件显示为 作为流提供。来自“多部分/表单数据”上传的文件流 还将有一个包含文件名和标题的属性 hapi 属性。
html代码:
<form enctype="multipart/form-data" action="/create" method="post">
<input type="file" id="UniqueFileImporter"/>
<input type="submit"/>
</form>
当然没有js代码,我只需要从系统中选择文件后提交表单
【问题讨论】:
-
您确定要发布一个带有名为
file的文件输入字段的表单吗?上面的代码看起来是正确的,所以我们需要查看 HTML 表单和/或 AJAX 代码的代码 -
@MattHarrison 嘿,我已经添加了 html,请看看是否有帮助