Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何上传文件-sails.js_Javascript_Node.js_Npm_Sails.js - Fatal编程技术网

Javascript 如何上传文件-sails.js

Javascript 如何上传文件-sails.js,javascript,node.js,npm,sails.js,Javascript,Node.js,Npm,Sails.js,我可以下载图像和pdf,但不能下载文档文件(.doc.pptx.odt…) 下载时,文档(.doc.pptx.odt…)仅作为.ZIP XML文件下载。 我能做什么 我正在使用: 因此,您使用的库是Sails.js生态系统的一部分,称为。它有一些文档可能对您有所帮助 它会在上载时将您的文件保存为随机GUID,直到您选择对其执行某些操作。我的猜测是,当它这样做时,它没有带“.docx”标签,.docx文件实际上只是拉链。(也许这是一个你可以归档的bug?) 我的建议是使用saveAs选项。您可以指

我可以下载图像和pdf,但不能下载文档文件(.doc.pptx.odt…)

下载时,文档(.doc.pptx.odt…)仅作为.ZIP XML文件下载。 我能做什么

我正在使用:


因此,您使用的库是Sails.js生态系统的一部分,称为。它有一些文档可能对您有所帮助

它会在上载时将您的文件保存为随机GUID,直到您选择对其执行某些操作。我的猜测是,当它这样做时,它没有带“.docx”标签,.docx文件实际上只是拉链。(也许这是一个你可以归档的bug?)

我的建议是使用saveAs选项。您可以指定一个字符串作为保存位置。i、 e:

req.file('file_upload').upload({saveAs:Guid.raw()+'.docx'},handleUploadCompletion);


它还可以传递函数,以便根据流处理多文件上载。

我在Windows上使用它,它没有问题

upload  : function (req, res) {
  req.file('avatar').upload({
    maxBytes: 10000000
  }, function whenDone(err, uploadedFiles) {
    if (err) {
      return res.negotiate(err);
    }

    var avatarFd = uploadedFiles[0].fd;

    res.ok(avatarFd);

  });
},
download: function (req, res) {
  var location = req.param('fd');
  var SkipperDisk = require('skipper-disk');
  var fileAdapter = SkipperDisk(/* optional opts */);
  fileAdapter.read(location).on('error', function (err) {
    return res.serverError(err);
  }).pipe(res);
}
首先使用
/somecontroller/upload
多部分/表单数据上传它,它将返回一个
fd
位置。并使用此url下载它

http://localhost:1337/somecontroller/download?fd=[fd-from-upload-return]
控制器名和主机名取决于应用程序配置


使用
fd
完整路径只是一个例子,在以后的生产中,您应该使用自己的控制器从上传的文件夹中寻址以返回已上传的文件,它通常位于
.tmp/uploads/

我认为您在响应中忘记了一些内容:

  • 内容处置:设置要发送的文件的名称
    • e、 g.“附件;文件名=“ecd1c7c2-6e32-4110-8905-c003a4713bb0.odt”
  • 内容类型:您发送的内容的MIME类型
    • e、 g.“application/vnd.oasis.opendocument.text”
您可以手动设置或使用
res.attachment
方法:

res.attachment(avatarFd);

如何更改下载文件的文件名?通过管道将写入流传输到
res.attachment('filename.ext')
而不是
res
res.attachment(avatarFd);