2016-08-01 25 views
4

Ich setze Header und Körper, Verwenden fetch mit Post, um Bild auf Server hochladen. Ich bekomme den Response-Code 200, aber es ist nicht Bild hochladen, aber der Rest der Daten wird hochgeladen. HierSo laden Sie Image auf Server mit ReactNative

ist der Code des Körpers:

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 

} 

Bitte help.What Fehler, den ich machen werde. :(

Antwort

5

ich habe die Lösung gefunden:

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() 

** Dateiname ist optional ...

3

Das Problem ist body.append({uri : imagePath}); weil reagieren nativer JSC nicht Datei und Blob nicht unterstützt, so dass Sie Bibliotheken verwenden.

react-native-fetch-blob hat eine sehr gute Unterstützung für diese, beispielsweise von seinem 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

Mit dieser gibt Fehler: Undefined ist ein Objekt (RNFetchBlob.DocumentDir bewerten) –

+0

Dies ist ein natives Modul, müssen Sie native Bibliotheken verknüpfen und das Projekt neu kompilieren. – Xeijp