在Android上反应本机上传图片

我在Android上有一个反应原生应用程序,而在NodeJS + Express上有一个后端服务器,我用multer来处理file upload。

const multer = require('multer'); const mime = require('mime'); const crypto = require('crypto'); const storage = multer.diskStorage({ destination: (req, file, cb) => cb(null, config.uploads), filename: (req, file, cb) => { crypto.pseudoRandomBytes(16, (err, raw) => { cb(null, raw.toString('hex') + Date.now() + '.' + mime.extension(file.mimetype)); }); } }); const upload = multer({ storage }); const Router = require('express').Router; const controller = require('./upload.controller'); const router = new Router(); const auth = require('./../../auth/auth.service'); router.post('/', [auth.isAuthenticated(), upload.any()], controller.create); module.exports = router; 

而在我的反应原生的应用程序,我尝试这样做:

 ImagePicker.launchCamera(options, image => { let { uri } = image const API_URL = 'http://192.168.1.2:9000/api/uploads' var form = new FormData(); form.append("FormData", true) form.append("access_token", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU3YjgyZGQ2MTEwZDcwYmEwYjUxZjM5YyIsImlzTWVkaWMiOnRydWUsImlhdCI6MTQ3MTY4ODE1MiwiZXhwIjoxNDcxNzA2MTUyfQ.gPeql5g66Am4Txl1WqnbvOWJaD8srTK_6vihOJ6kFbY") form.append("Content-Type", "image/jpg") form.append('image', uri) fetch(API_URL, {body: form, mode: "FormData", method: "post", headers: {"Content-Type": "multipart/form-data"}}) .then((response) => console.log(response)) .catch((error) => { console.log("ERROR " + error) }) .then((responseData) => { console.log("Succes "+ responseData) }) .done(); }) 

但是,当我尝试上传我recive下面的错误

多部分机构必须至less有一个部分

我做错了什么?

有谁知道更好的解决scheme来做到这一点?

取此时可能不支持Blob和FormData,但是可以使用XMLHttpRequest填充。

  let xhr = new XMLHttpRequest() xhr.open('post', `http://myserver.com/upload-form`) xhr.send(form) xhr.onerror = function(e) { console.log('err', e) } xhr.onreadystatechange = function() { if(this.readyState === this.DONE) { console.log(this.response) } }