Node.js 如何使用NodeJs上传图像?
我想用Node Js上传产品图片。所以我用multer上传图像。我用postman测试它是否有效,但它返回Node.js 如何使用NodeJs上传图像?,node.js,multer,Node.js,Multer,我想用Node Js上传产品图片。所以我用multer上传图像。我用postman测试它是否有效,但它返回请上传一个文件。我更改了另一个图像,然后显示PayloadTooLargeError:请求实体太大 MyCode const express = require("express"); const router = express.Router(); const multer = require('multer'); const storage = multer.diskStorage
请上传一个文件
。我更改了另一个图像,然后显示PayloadTooLargeError:请求实体太大
MyCode
const express = require("express");
const router = express.Router();
const multer = require('multer');
const storage = multer.diskStorage(
{
destination: function(req, file, cb)
{
cb(null, './uploads/');
},
filename: function(req, file, cb)
{
cb(null, new Date().toISOString() + file.originalname);
}
});
const fileFilter = (req, file, cb) =>
{
// reject a file
if (file.mimetype === 'image/jpeg' || file.mimetype === 'image/png')
{
cb(null, true);
}
else
{
cb(null, false);
}
};
const upload = multer(
{
storage: storage,
limits:
{
fileSize: 1024 * 1024 * 50
},
fileFilter: fileFilter
});
router.post("/upload", upload.single('productImage'), (req, res, next) =>
{
if (!req.file)
return res.send('Please upload a file')
var tempPath = req.file.path
console.log(tempPath);
});
package.json
{
"name": "api",
"version": "1.0.0",
"description": "testing version",
"main": "server.js",
"dependencies": {
"express": "^4.16.4",
"multer": "^1.3.0",
"nodemon": "^1.18.10",
},
"devDependencies": {},
"scripts": {
"test": "node server.js",
"start": "nodemon server.js"
},
"keywords": [
"api"
],
"author": "tteam",
"license": "ISC"
}
你的代码运行正常,我只需将
upload.single('productImage')
更改为upload.single('image')
,我没有遇到任何类似的错误,请上传一个文件
,这是我的笔,它和你的一样,工作正常
请上载文件
仅当您未选择任何文件或选择错误的文件类型时才会发生
我已经更新了您的代码,并对其进行了一些更改。请检查此处:
你的代码运行良好,我只需将
上传.single('productImage')
更改为上传.single('image')
,我没有遇到任何类似的错误,请上传一个文件
,这是我的笔,它和你的一样,工作正常
请上载文件
仅当您未选择任何文件或选择错误的文件类型时才会发生
我已经更新了您的代码,并对其进行了一些更改。请检查此处:
错误:eNote:没有这样的文件或目录,请打开“C:\Users\ttest\Downloads\Compressed\uploads master\api\routes\uploads\2019-04-18T14:02:45.456Z55460132_25_63992_n(1).jpg”
我认为问题似乎在于您存储上传文件的位置。在存储文件之前,需要检查是否存在upload/
user.js
const path = require('path');
const fs = require('fs-extra');
let UPLOAD_LOCATION = path.join(__dirname, 'uploads');
fs.mkdirsSync(UPLOAD_LOCATION); //create `uploads/` folder, if it doesn't exists
使用此位置存储上载文件
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, UPLOAD_LOCATION);
},
filename: function (req, file, cb) {
cb(null, new Date().toISOString() + file.originalname);
}
});
作为参考,您可以查看
错误:eNote:没有这样的文件或目录,请打开“C:\Users\ttest\Downloads\Compressed\uploads master\api\routes\uploads\2019-04-18T14:02:45.456Z55460132_25_63992_n(1).jpg”
我认为问题似乎在于您存储上传文件的位置。在存储文件之前,需要检查是否存在upload/
user.js
const path = require('path');
const fs = require('fs-extra');
let UPLOAD_LOCATION = path.join(__dirname, 'uploads');
fs.mkdirsSync(UPLOAD_LOCATION); //create `uploads/` folder, if it doesn't exists
使用此位置存储上载文件
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, UPLOAD_LOCATION);
},
filename: function (req, file, cb) {
cb(null, new Date().toISOString() + file.originalname);
}
});
作为参考,您可以选中在转换为字符串后,存储文件将变得很容易。您只需在前端转换图像中的字符串即可 在api中使用此代码将图像转换为
base64
字符串,并且不要忘记从上载文件夹中删除文件
"img": new Buffer.from(fs.readFileSync(req.file.path)).toString("base64")
删除文件
let resultHandler = function (err) {
if (err) {
console.log("unlink failed", err);
} else {
console.log("file deleted");
}
}
fs.unlink(req.file.path, resultHandler);
在您的路线上导入multer
:
const multer = require('multer');
const upload = multer({ dest: __dirname + '/uploads/images' });`
在您的请求中添加upload.single('img'):
router.post(
'/fellows-details',
authorize([Role.ADMIN, Role.USER]),
upload.single('img'),
usersController.fellowsdetails
);
如果不使用
取消链接
功能,则会导致错误,因为它首先将缓冲区
值存储在文件夹中,然后将其转换为base64
,转换为字符串后,将很容易存储文件。您只需在前端转换图像中的字符串即可
在api中使用此代码将图像转换为base64
字符串,并且不要忘记从上载文件夹中删除文件
"img": new Buffer.from(fs.readFileSync(req.file.path)).toString("base64")
删除文件
let resultHandler = function (err) {
if (err) {
console.log("unlink failed", err);
} else {
console.log("file deleted");
}
}
fs.unlink(req.file.path, resultHandler);
在您的路线上导入multer
:
const multer = require('multer');
const upload = multer({ dest: __dirname + '/uploads/images' });`
在您的请求中添加upload.single('img'):
router.post(
'/fellows-details',
authorize([Role.ADMIN, Role.USER]),
upload.single('img'),
usersController.fellowsdetails
);
如果不使用
取消链接
功能,会导致错误,因为它首先将缓冲区
值存储在文件夹中,然后将其转换为base64
是否使用正文解析器
?如果是这样,增加中所述的限制将有帮助!,我也用过。但是它找不到文件,说请上传一个文件
你想把它保存到数据库还是文件夹中?两者都要。文件夹中的图像和数据库中的图像名称是否使用正文解析器
?如果是这样,增加中所述的限制将有帮助!,我也用过。但是它找不到文件,说请上传一个文件
你想把它保存到数据库还是文件夹中?两者都要。文件夹中的图像,其名称为dbit无法识别上载文件,并说,请上载文件
您是否在表单中使用此enctype=“multipart/form data”
显示您的htmlcheck my github repo在我的回答中,我已经更新了它您的代码在进行相同更改后仍在工作。好,我使用了你的代码,但我得到了错误error:enoint:没有这样的文件或目录,打开'C:\Users\ttest\Downloads\Compressed\uploads master\api\routes\uploads\2019-04-18T14:02:45.456Z55460132_25_63992_n(1)。jpg'
你是否更改了一些看起来像是由于路径错误造成的错误,确保所有路径都正确还有一件事你应该使用express.static
给出节点中的静态路径或其他模块,它不识别上传文件并说,请上传一个文件
你是否在表单中使用此enctype=“multipart/form data”
在我的回答中显示你的htmlcheck my github repo,我现在已经更新了它,您的代码在做了相同的更改后仍能正常工作。好的,我使用了您的代码,但出现了错误错误:enoint:没有这样的文件或目录,请打开'C:\Users\ttest\Downloads\Compressed\uploads master\api\routes\uploads\2019-04-18T14:02:45.456Z55460132\u 25\u 63992\n(1).jpg'
您是否更改了某些内容这看起来像是由于某个不正确的路径而导致的错误,请确保所有路径都正确还有一件事您应该使用express.static
来提供节点中的静态路径或其他模块