0
時候我已經寫了一些中間件上傳頭像,就像這樣:Expressjs:ENOENT上傳圖像
var gm = require('gm'),
mkdirp = require('mkdirp'),
fs = require('fs');
uploadAvatar = function(req, res, next) {
var img, path, user;
if (req.files.avatar_image) {
user = req.user;
img = req.files.avatar_image;
path = __dirname + "/../../public/avatar/" + (user.name.parameterize()) + ".png";
mkdirp.sync(__dirname + "/../../public/avatar/");
fs.createReadStream(img.path).pipe(fs.createWriteStream(path));
gm(path).resize(250, 250).autoOrient().quality(90).write(path, function(err) {
if (err != null) {
req.flash('error', err);
} else {
user.avatar = "/avatar/" + (user.name.parameterize()) + ".png";
user.save(function(err) {
if (err != null) {
req.flash('error', err);
}
next();
});
}
});
} else {
next();
}
};
// Usage
app.post('/upload', ensureAuthenticated, uploadAvatar, handleUpload);
當我現在試着上傳一張圖片,node
墜毀與難以置信的幫助錯誤消息:
events.js:72
throw er; // Unhandled 'error' event
^
Error: ENOENT, open '/tmp/1126846a248af5c584770b07de649f9b.png'
我曾嘗試使用它之前gm
複製文件了。作爲一種「安全」,我懷疑在我甚至可以觸摸它之前,express會刪除這個文件。
誰能幫助我在這裏?
編輯:Full source所有的
請看看我說的要點,並告訴我,我做錯了。我*是*在調整大小之前複製文件。 – Lanbo
檢查權限的臨時目錄,及其母公司等。爲了確保正在運行節點進程的用戶有權訪問臨時文件夾中的文件。 – moka
對不起,我剛剛發現的臨時目錄不存在。不知道爲什麼。 – Lanbo