我可以下载图片和pdf,但我无法下载文件文件(.doc .pptx .odt ...)
当下载Documents(.doc .pptx .odt ...)作为.ZIP仅下载XML文件时。 我能做什么?
我正在使用:fill out upload file docs
upload: function (req, res) {
req
.file('avatar')
.upload({
maxBytes: 10000000
}, function whenDone(err, uploadedFiles) {
if (err) {
return res.negotiate(err);
}
// Generate a unique URL where the avatar can be downloaded.
avatarUrl = require('util').format('%s/user/avatar/%s', sails.getBaseUrl(), req.session.User.id_user),
// Grab the first file and use it's `fd` (file descriptor)
avatarFd = uploadedFiles[0].fd
var SkipperDisk = require('skipper-disk');
var fileAdapter = SkipperDisk(/* optional opts */);
// Stream the file down
fileAdapter.read(avatarFd).on('error', function (err){
return res.serverError(err);
}).pipe(res);
});
},
答案 0 :(得分:3)
我在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
使用multipart/form-data
上传它,它将返回fd
位置。并使用此URL下载
http://localhost:1337/somecontroller/download?fd=[fd-from-upload-return]
控制器名称和主机名取决于您的应用程序配置。
使用fd
完整路径仅作为示例,在生产之后您应该使用自己的控制器从上传的文件夹中寻址以返回已上传的文件,它通常在{{1}上}。
答案 1 :(得分:2)
因此,您正在使用属于Sails.js生态系统的库Skipper。它有一些可能对您有帮助的文档。
在您选择对其执行某些操作之前,它会将您的文件保存为上传时的随机GUID。我的猜测是它没有携带" .docx"当它这样做时标记它.docx文件实际上只是拉链。 (也许这是你可以提交的错误?)
我的建议是使用saveAs选项。您可以指定要用作保存位置的字符串。即:
req.file('file_upload').upload({saveAs: Guid.raw()+'.docx'}, handleUploadCompletion);
还可以传递函数,以便根据流处理多文件上传。
答案 2 :(得分:2)
我认为你在回复中遗忘了一些HTTP headers:
您可以手动设置它们或使用res.attachment
方法:
res.attachment(avatarFd);