簡體   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