繁体   English   中英

使用sails.js在nodejs服务器中上传文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM