[英]upload a file in nodejs server with sails.js
我通过遵循此页面中的示例,在节点上使用sails.js创建了一个具有端点的服务器,以在服务器上上传文件。
这里是完整的代码:
req.file('file').upload({
maxBytes: 10000000,
dirname: './my-dir'
}, function whenDone (err, uploadedFiles) {
var fs = require('fs');
if (err) {
return res.negotiate(err);
}
// If no files were uploaded, respond with an error.
if (uploadedFiles.length === 0){
return res.badRequest('No file was uploaded');
}
console.log('file exists:', fs.existsSync(uploadedFiles[0].fd));
var path = uploadedFiles[0].fd;
var tmpFileName = /[^/]*$/.exec(path)[0];
var url = '/my-dir/'+tmpFileName;
return res.send(url);
});
添加console.log
行只是为了确保在调用函数whenDone
时文件存在(并且每次调用已存在该文件)。
问题是在客户端上:当页面将文件发送到此端点并从服务器接收响应时,它尝试将另一个请求发送到相同的上载文件(通常是图像),并且收到404。
使用console.log
我检查了该文件是否存在,并且我确定该URL是否正确,如果我尝试使用该URL访问该文件,服务器将返回该文件,以及是否在客户端代码上添加了setTimeout工作90%的时间(这意味着时间问题)。
当文件不仅被加载而且还准备好发送给客户端时,是否会触发一些sails.js事件?
提前致谢。
从项目根目录的.tmp
目录中提取静态资产(在您的情况下为上传的文件)。 抬起帆时, .tmp
会清理并填充所有资产(来自您的assets
目录)。 但是,添加新文件后,该文件不会立即复制到.tmp
,导致您提到的404
s。
为了解决这个问题,您可以在上传完成后立即将文件复制到.tmp
目录,然后再将响应发送给客户端。
该线程可以帮助您进行复制。
更好的方法是直接上传到CDN或S3。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.