2016-08-01 77 views
4

我正在設置標題和正文,使用fetch with Post上傳圖像到服務器上。我得到響應代碼200,但它沒有上傳圖像,但數據的其餘部分正在上傳。如何使用ReactNative在服務器上上傳圖像

這裏是身體的代碼:我正在

export default function setRequestBody(imagePath){ 

    let boundry = "----WebKitFormBoundaryIOASRrUAgzuadr8l"; 

    let body = new FormData(); 

    body.append("--"+boundry+"\r\n"); 
    body.append("Content-Disposition: form-data; name=imageCaption\r\n\r\n"); 
    body.append("Caption"+"\r\n"); 
    body.append("--"+boundry+"\r\n"); 
    body.append("Content-Disposition: form-data; name=imageFormKey; filename =iimageName.pngg \r\n"); 
    body.append("Content-Type: image/png \r\n\r\n"); 
    body.append({uri : imagePath}); 
    // appened image Data Here 
    body.append("\r\n"); 
    body.append("--"+boundry+"--\r\n"); 
    return body 

} 

請help.What錯誤。 :(

回答

5
這個很好的支持,例如

我已經找到了解決辦法:

let body = new FormData(); 
body.append('photo', {uri: imagePath,name: 'photo.png',filename :'imageName.png',type: 'image/png'}); 
    body.append('Content-Type', 'image/png'); 

fetch(Url,{ method: 'POST',headers:{ 
    "Content-Type": "multipart/form-data", 
    "otherHeader": "foo", 
    } , body :body}) 
    .then((res) => checkStatus(res)) 
    .then((res) => res.json()) 
    .then((res) => { console.log("response" +JSON.stringify(res)); }) 
    .catch((e) => console.log(e)) 
    .done() 

**文件名是可選...

3

問題是body.append({uri : imagePath});因爲反應JSC原生不支持文件和斑點,所以你必須使用圖書館。

react-native-fetch-blob有其README.md

RNFetchBlob.fetch('POST', 'http://www.example.com/upload-form', { 
     Authorization : "Bearer access-token", 
     otherHeader : "foo", 
     'Content-Type' : 'multipart/form-data', 
    }, [ 
    // element with property `filename` will be transformed into `file` in form data 
    { name : 'avatar', filename : 'avatar.png', data: binaryDataInBase64}, 
    // custom content type 
    { name : 'avatar-png', filename : 'avatar-png.png', type:'image/png', data: binaryDataInBase64}, 
    // part file from storage 
    { name : 'avatar-foo', filename : 'avatar-foo.png', type:'image/foo', data: RNFetchBlob.wrap(path_to_a_file)}, 
    // elements without property `filename` will be sent as plain text 
    { name : 'name', data : 'user'}, 
    { name : 'info', data : JSON.stringify({ 
     mail : '[email protected]', 
     tel : '12345678' 
    })}, 
    ]).then((resp) => { 
    // ... 
    }).catch((err) => { 
    // ... 
    }) 
+0

使用此錯誤給出了錯誤: Undefined是一個對象(評估RNFetchBlob.DocumentDir) –

+0

這是一個本地模塊,您必須鏈接本機庫並重新編譯該項目。 – Xeijp