Multer 不以任何方式将图像保存在磁盘上
Multer Doesn't Save Images on Disk In Any Way
它根本不会将任何内容保存到我指定的 destination
文件夹中。
我试过 {storage:storage}
而不是 {dest: 'storage/'}
但它也没有用。
图像数据实际上是在控制台记录时发送到服务器的。我指定的 dest
是默认创建的,但仍为空。
const express = require('express');
const app = express();
const multer = require('multer');
let storage = multer.diskStorage({
destination: '/public/my-uploads',
filename: function (req, file, cb) {
cb(null, file.fieldname + '-' + Date.now())
}
});
const upload = multer({dest:'storage/'}).single('file');
app.post('/upload', upload, (req , res) => {
console.log(req.files) // this does log the uploaded image data.
})
***** EDIT ******
HTML
<form onSubmit={this.upload} enctype='multipart/form-data'>
<input type='file' name='image' />
<input type='submit' value='upload' />
</form>
JS
upload(e){
e.preventDefault();
const file = e.target[0].files[0];
console.log(file)
const fm = new FormData();
fm.append('file', file);
console.log(fm)
axios.post('/upload', fm);
}
POSTMAN
似乎您没有使用存储变量并使用目标键的函数,如文档中所写,您还需要在名为 field
的输入字段中传递文件,否则 multer 不能存储文件,创建一个与代码同级的存储文件夹:
const http = require('http')
const port = 3000
const express = require('express');
const app = express();
const multer = require('multer');
const server = http.createServer(app)
let storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, './storage')
},
filename: function (req, file, cb) {
cb(null, file.fieldname + '-' + Date.now())
}
});
const upload = multer({ storage }).single('file');
app.post('/upload', upload, (req, res) => {
console.log(req.files) // this does log the uploaded image data.
})
// bind the server on port
server.listen(port, (err) => {
if (err) {
return console.log('something bad happened', err)
}
console.log(`server is listening on ${port}`)
})
尝试捕获我自己调用中间件的错误:
var upload = multer().single('avatar')
app.post('/upload', function (req, res) {
upload(req, res, function (err) {
if (err) {
// An error occurred when uploading
return
}
// Everything went fine
})
})
此外,将存储更改为:
let storage = multer.diskStorage({
destination: function(req, file, ca) {
cb(null, '/public/my-uploads');
}
filename: function (req, file, cb) {
cb(null, file.fieldname + '-' + Date.now())
}
});
...single('file')
中“单个”的名称必须与输入(包含文件)中的名称相匹配 <input type="file" name='image' />
- 而在您的示例中则不匹配。
将 multer-part 更改为此 ...single('image')
- 如输入 name='image'
尝试使用此文件存储在本地保存图像
const fileStorage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, "images");
},
filename: (req, file, cb) => {
cb(
null,
new Date().toISOString().replace(/:/g, "-") + "-" + file.originalname
);
},
});
已经有一段时间了,问题是我根本没有使用 multer 中间件,所以处理图像的回调代码从未执行过。
那时我还不太了解express是怎么运作的
它根本不会将任何内容保存到我指定的 destination
文件夹中。
我试过 {storage:storage}
而不是 {dest: 'storage/'}
但它也没有用。
图像数据实际上是在控制台记录时发送到服务器的。我指定的 dest
是默认创建的,但仍为空。
const express = require('express');
const app = express();
const multer = require('multer');
let storage = multer.diskStorage({
destination: '/public/my-uploads',
filename: function (req, file, cb) {
cb(null, file.fieldname + '-' + Date.now())
}
});
const upload = multer({dest:'storage/'}).single('file');
app.post('/upload', upload, (req , res) => {
console.log(req.files) // this does log the uploaded image data.
})
***** EDIT ******
HTML
<form onSubmit={this.upload} enctype='multipart/form-data'>
<input type='file' name='image' />
<input type='submit' value='upload' />
</form>
JS
upload(e){
e.preventDefault();
const file = e.target[0].files[0];
console.log(file)
const fm = new FormData();
fm.append('file', file);
console.log(fm)
axios.post('/upload', fm);
}
POSTMAN
似乎您没有使用存储变量并使用目标键的函数,如文档中所写,您还需要在名为 field
的输入字段中传递文件,否则 multer 不能存储文件,创建一个与代码同级的存储文件夹:
const http = require('http')
const port = 3000
const express = require('express');
const app = express();
const multer = require('multer');
const server = http.createServer(app)
let storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, './storage')
},
filename: function (req, file, cb) {
cb(null, file.fieldname + '-' + Date.now())
}
});
const upload = multer({ storage }).single('file');
app.post('/upload', upload, (req, res) => {
console.log(req.files) // this does log the uploaded image data.
})
// bind the server on port
server.listen(port, (err) => {
if (err) {
return console.log('something bad happened', err)
}
console.log(`server is listening on ${port}`)
})
尝试捕获我自己调用中间件的错误:
var upload = multer().single('avatar')
app.post('/upload', function (req, res) {
upload(req, res, function (err) {
if (err) {
// An error occurred when uploading
return
}
// Everything went fine
})
})
此外,将存储更改为:
let storage = multer.diskStorage({
destination: function(req, file, ca) {
cb(null, '/public/my-uploads');
}
filename: function (req, file, cb) {
cb(null, file.fieldname + '-' + Date.now())
}
});
...single('file')
中“单个”的名称必须与输入(包含文件)中的名称相匹配 <input type="file" name='image' />
- 而在您的示例中则不匹配。
将 multer-part 更改为此 ...single('image')
- 如输入 name='image'
尝试使用此文件存储在本地保存图像
const fileStorage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, "images");
},
filename: (req, file, cb) => {
cb(
null,
new Date().toISOString().replace(/:/g, "-") + "-" + file.originalname
);
},
});
已经有一段时间了,问题是我根本没有使用 multer 中间件,所以处理图像的回调代码从未执行过。 那时我还不太了解express是怎么运作的