获取由 nodejs 中的 multer 发送的文件?
get the file which send by the multer in nodejs?
这是我的 upload.js 代码:
var multer = require('multer');
var express = require('express');
const router = express.Router();
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'uploads');
},
filename: function (req, file, cb) {
cb(null, file.fieldname + '-' + Date.now());
},
});
var upload = multer({ storage: storage });
router.post('/', upload.single('file'), (req, res, next) => {
const file = req.file;
if (!file) {
const error = new Error('Please upload a file');
error.httpStatusCode = 400;
return next(error);
}
res.send(file);
});
module.exports = router;
谁能告诉我 router.get 是什么?这样我就可以在回复中得到一张图片。
您可以简单地 statically serve uploads
文件夹。通过这样做,您不需要实际的 get
-处理程序,而是定义 express.static
-中间件
app.use(express.static('uploads'));
现在客户端只需向 http://yourServer/<imagename>-<timestamp>
执行请求,文件将自动提供。
编辑:
为了将生成的文件名发送给客户端,您可以执行以下操作:
您可以 return 包含生成的文件名的 json,而不是在您的 post 处理程序中执行 res.send(file);
,然后客户端可以请求该文件名:
app.post("/upload", upload.single('image'), (req, res) => {
res.json({uploadedFile: req.file.filename})
});
还有一件事:使用 filename
功能,您将丢失文件的扩展名。为了保留您可以做的扩展(确保 require
path
-模块):
filename: (req, file, cb) => {
const extension = path.extname(file.originalname);
cb(null, `${file.fieldname}-${Date.now()}${extension}`);
}
eol 的回答很好,但如果您需要保持访问权限,控制器可能看起来像这样:
res.writeHead(200,{'content-type':'image/jpg'});
fs.createReadStream('./image/demo.jpg').pipe(res);
这是我的 upload.js 代码:
var multer = require('multer');
var express = require('express');
const router = express.Router();
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'uploads');
},
filename: function (req, file, cb) {
cb(null, file.fieldname + '-' + Date.now());
},
});
var upload = multer({ storage: storage });
router.post('/', upload.single('file'), (req, res, next) => {
const file = req.file;
if (!file) {
const error = new Error('Please upload a file');
error.httpStatusCode = 400;
return next(error);
}
res.send(file);
});
module.exports = router;
谁能告诉我 router.get 是什么?这样我就可以在回复中得到一张图片。
您可以简单地 statically serve uploads
文件夹。通过这样做,您不需要实际的 get
-处理程序,而是定义 express.static
-中间件
app.use(express.static('uploads'));
现在客户端只需向 http://yourServer/<imagename>-<timestamp>
执行请求,文件将自动提供。
编辑:
为了将生成的文件名发送给客户端,您可以执行以下操作:
您可以 return 包含生成的文件名的 json,而不是在您的 post 处理程序中执行 res.send(file);
,然后客户端可以请求该文件名:
app.post("/upload", upload.single('image'), (req, res) => {
res.json({uploadedFile: req.file.filename})
});
还有一件事:使用 filename
功能,您将丢失文件的扩展名。为了保留您可以做的扩展(确保 require
path
-模块):
filename: (req, file, cb) => {
const extension = path.extname(file.originalname);
cb(null, `${file.fieldname}-${Date.now()}${extension}`);
}
eol 的回答很好,但如果您需要保持访问权限,控制器可能看起来像这样:
res.writeHead(200,{'content-type':'image/jpg'});
fs.createReadStream('./image/demo.jpg').pipe(res);