在 NodeJs 中使用 Multer 上传文件时出错
Error uploading files using Multer in NodeJs
我正在尝试编写一个基于 Express 的 API 来上传文件。文件名和目录路径应该动态设置。
我的代码:
var crypto = require('crypto')
var express = require('express');
var fs = require('fs');
var mime = require('mime');
var mkdirp = require('mkdirp');
var multer = require('multer');
var app = express();
var path = './uploads';
var storage = multer.diskStorage({
destination: function (req, file, callback) {
callback(null, path);
console.log('Im in storage destination'+path);
},
filename: function (req, file, callback) {
console.log('Im in storage filename'+path);
//callback(null, file.fieldname + '-' + Date.now());
crypto.pseudoRandomBytes(16, function (err, raw) {
callback(null, Date.now() + '.' + mime.extension(file.mimetype));
});
}
});
var upload = multer({ storage : storage}).single('userPhoto');
app.post('/photo',function(req,res){
path += '/pics/shanmu/';
console.log('Im in post , outside upload'+path);
upload(req,res,function(err) {
console.log('Im in post , inside upload'+path);
if(err) {
return res.end('Error uploading file.');
}
res.end('File is uploaded'+path);
console.log('File is uploaded'+path);
});
});
app.listen(3000,function(){
console.log('Working on port 3000');
});
我的文件夹结构:
当我运行代码时,文件应该上传到uploads/
文件夹中。 (此文件夹中有两个嵌套文件夹 - uploads/pics/shanmu
)。
当我从邮递员那里触发它时,它只起作用一次。第二次尝试时,无法上传文件
请指教
有时我得到了一个使用 multer 的解决方案 module.Using 这个模块你可以上传两个文件并且 images.And 它成功上传到目标文件夹。
这是我的服务器代码app.js
var express =r equire('express');
var multer = require('multer');
var path = require('path')
var app = express();
var ejs = require('ejs')
app.set('view engine', 'ejs')
var storage = multer.diskStorage({
destination: function(req, file, callback) {
callback(null, './public/uploads')//here you can place your destination path
},
filename: function(req, file, callback) {
callback(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname))
}
})
app.get('/api/file',function(req,res){
res.render('index');
});
app.post('/api/file', function(req, res) {
var upload = multer({
storage: storage}).single('userFile');
upload(req, res, function(err) {
console.log("File uploaded");
res.end('File is uploaded')
})
})
app.listen(3000,function(){
console.log("working on port 3000");
});
创建一个 views
文件夹并将此 index.ejs
文件放入其中
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<form id="uploadForm" enctype="multipart/form-data" method="post">
<input type="file" name="userFile" />
<input type="submit" value="Upload File" name="submit">
</form>
</body>
</html>
在此之后 运行 服务器为 node app.js
。打开浏览器并在 运行nig this url 之后输入 http://localhost:3000/api/file
选择一个你想要的文件上传到目的地 folder.And 在终端和 browser.Hope 中都有成功的响应,这对你有帮助。
我让你的代码正常工作。参见:
https://gist.github.com/lmiller1990/3f1756efc07e09eb4f44e20fdfce30a4
我认为问题出在您声明 destination
的方式上。不过,我不确定为什么。我通过将路径作为字符串传递来让它工作。
祝你好运!
我正在尝试编写一个基于 Express 的 API 来上传文件。文件名和目录路径应该动态设置。
我的代码:
var crypto = require('crypto')
var express = require('express');
var fs = require('fs');
var mime = require('mime');
var mkdirp = require('mkdirp');
var multer = require('multer');
var app = express();
var path = './uploads';
var storage = multer.diskStorage({
destination: function (req, file, callback) {
callback(null, path);
console.log('Im in storage destination'+path);
},
filename: function (req, file, callback) {
console.log('Im in storage filename'+path);
//callback(null, file.fieldname + '-' + Date.now());
crypto.pseudoRandomBytes(16, function (err, raw) {
callback(null, Date.now() + '.' + mime.extension(file.mimetype));
});
}
});
var upload = multer({ storage : storage}).single('userPhoto');
app.post('/photo',function(req,res){
path += '/pics/shanmu/';
console.log('Im in post , outside upload'+path);
upload(req,res,function(err) {
console.log('Im in post , inside upload'+path);
if(err) {
return res.end('Error uploading file.');
}
res.end('File is uploaded'+path);
console.log('File is uploaded'+path);
});
});
app.listen(3000,function(){
console.log('Working on port 3000');
});
我的文件夹结构:
当我运行代码时,文件应该上传到uploads/
文件夹中。 (此文件夹中有两个嵌套文件夹 - uploads/pics/shanmu
)。
当我从邮递员那里触发它时,它只起作用一次。第二次尝试时,无法上传文件
请指教
有时我得到了一个使用 multer 的解决方案 module.Using 这个模块你可以上传两个文件并且 images.And 它成功上传到目标文件夹。
这是我的服务器代码app.js
var express =r equire('express');
var multer = require('multer');
var path = require('path')
var app = express();
var ejs = require('ejs')
app.set('view engine', 'ejs')
var storage = multer.diskStorage({
destination: function(req, file, callback) {
callback(null, './public/uploads')//here you can place your destination path
},
filename: function(req, file, callback) {
callback(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname))
}
})
app.get('/api/file',function(req,res){
res.render('index');
});
app.post('/api/file', function(req, res) {
var upload = multer({
storage: storage}).single('userFile');
upload(req, res, function(err) {
console.log("File uploaded");
res.end('File is uploaded')
})
})
app.listen(3000,function(){
console.log("working on port 3000");
});
创建一个 views
文件夹并将此 index.ejs
文件放入其中
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<form id="uploadForm" enctype="multipart/form-data" method="post">
<input type="file" name="userFile" />
<input type="submit" value="Upload File" name="submit">
</form>
</body>
</html>
在此之后 运行 服务器为 node app.js
。打开浏览器并在 运行nig this url 之后输入 http://localhost:3000/api/file
选择一个你想要的文件上传到目的地 folder.And 在终端和 browser.Hope 中都有成功的响应,这对你有帮助。
我让你的代码正常工作。参见:
https://gist.github.com/lmiller1990/3f1756efc07e09eb4f44e20fdfce30a4
我认为问题出在您声明 destination
的方式上。不过,我不确定为什么。我通过将路径作为字符串传递来让它工作。
祝你好运!