2016-08-21 10 views
1

私はAndroidに反応ネイティブアプリを、NodeJS + Expressで書かれたバックエンドサーバーを持っています。私はファイルアップロードを処理するためにmulterを使用しています。androidに反応したネイティブアップロード画像

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少なくとも1つの部分

私は何か間違っていますか?

これを行うには誰かがより良い解決策を知っていますか?

答えて

2

フェッチはこの時点でBlobとFormDataをサポートしていない可能性がありますが、代わりにXMLHttpRequest polyfillを使用できます。

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) 
    } 
    } 
関連する問題