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