我是sendind文件的详细信息,从角度到我的app.js为
onFileSelected(event: EventEmitter<File[]>) {
const file: File = event[0];
console.log(file);
const formData = new FormData();
formData.append('file', file);
const r = new XMLHttpRequest();
r.open('POST', '/user/upload');
r.send(formData);
}
然后在app.js中
const multer = require('multer');
const upload = multer({dest:'./pics/'});
router.post('/upload', upload.single('image'), (req,res) => {
const body = req.file;
console.log(body);
const base64Data = new Buffer(JSON.stringify(body)).toString("base64");
console.log(base64Data);
}
和我的console.log(body)
给予
{ fieldname: 'image',
originalname: '21329726_1866651723650020_188839340_o.jpg',
encoding: '7bit',
mimetype: 'image/jpeg',
destination: './pics/',
filename: '5146c9818ff517c426e34ad84ff3513f',
path: 'pics/5146c9818ff517c426e34ad84ff3513f',
size: 94093
}
现在问题出在这里-
1-我不想将我的image/pdf
文件上传到任何文件夹中,但是它正在'./pics/'
中上传。
2-我想在cloudinary
中上传该文件,这就是为什么我要生成该文件的base64
的原因,但是当我生成base64
并将其上传到云中时,错误。
我认为这不是用base64
编码的正确方法,或者我编码的数据格式错误。
请帮助我。
答案 0 :(得分:1)
我建议您使用multiparty。一个简单的解决方案可以处理表单数据。
您可以在这里上传文件而无需保存。我正在使用它在AWS S3
router.post('/upload',(req,res)=>{
let form = new multiparty.Form();
form.parse(req, function(err, fields, files) {
//here files is array
const base64Data = new Buffer(JSON.stringify(body)).toString("base64");
console.log(base64Data);
});
});
否则,您只需忽略dest
对象。该文件将存储在内存中,而不是物理位置:
答案 1 :(得分:1)
通过提供选项对象(在本例中为{dest:'./pics/'}
),您告诉multer
您想要将文件存储在该目录中。而是将其配置为将文件保存在内存中:
var storage = multer.memoryStorage()
var upload = multer({ storage: storage })
根据文档,file
对象还应包括一个buffer
属性,该属性包含文件数据。您应该可以做到:
console.log(body.buffer.toString("base64"));