use*_*635 7 node.js multer react-native multer-s3
我有一个照片应用程序(React Native),它试图向 nodejs express 端点发出 POST 请求,其中包含照片和一些元数据。节点应用程序将照片上传到 s3。
使用 multer,照片 + s3 位运行良好,但我似乎无法访问元数据。它遇到了空。
客户:React Native
var formData = new FormData();
formData.append('photo', {
uri: this.state.photo.uri,
name: 'image.jpg',
type: 'image/jpeg',
});
formData.append('meta', {
title: "the best title",
lat: this.state.lat,
long: this.state.long
});
const config = {
method: 'POST',
body: formData,
headers: {
'Accept': 'application/json',
}
}
console.log(config) // I see both photo and meta in the formData
fetch("http://localhost:5001/upload", config)
.then((responseData) => {
console.log('awesome, we did it');
})
.catch(err => {
console.log(err);
});
}
Run Code Online (Sandbox Code Playgroud)
服务器:Nodejs + multer + s3
const express = require('express');
const bodyParser = require('body-parser');
const multer = require('multer');
multerS3 = require('multer-s3');
var AWS = require('aws-sdk');
var fs = require('fs');
var s3 = new AWS.S3();
var myBucket = 'my-bucket';
var myKey = 'jpeg';
var upload = multer({
storage: multerS3({
s3: s3,
bucket: myBucket,
key: function (req, file, cb) {
console.log(file);
cb(null, file.originalname);
}
})
});
const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: false
}));
app.post('/upload', upload.array('photo', 1), (request, response, next) => {
// The upload to s3 works fine
console.log(request.body); // I cannot see anything in the body, I only see { meta: '' }
response.send('uploaded!')
});
exports.app = functions.https.onRequest(app);
Run Code Online (Sandbox Code Playgroud)
您似乎忘记设置应用程序来解析作为 发送的数据form-data
。如果您查看bodyparser文档,您会发现必须使用以下命令启用form-data
解析:
app.use(bodyParser.urlencoded({
extended: false
}));
Run Code Online (Sandbox Code Playgroud)
所以配置应该是这样的:
const app = express();
app.use(bodyParser.urlencoded({
extended: false
}));
app.use(bodyParser.json());
app.post('/upload', upload.array('photo', 1), (request, response, next) =>
{
// The upload to s3 works fine
console.log(request.body); // I cannot see anything in the body, I only see { meta: '' }
response.send('uploaded!')
});
Run Code Online (Sandbox Code Playgroud)
通过此设置,您的代码应该按预期工作。
归档时间: |
|
查看次数: |
9648 次 |
最近记录: |