2017-03-08 61 views
5

Korzystam z aplikacji reagujących na aplikacje na Androida. I użyj axios jako biblioteki http. Gdy próbuję wysłać Blob obiektu poprzez HTTP POST będę się poniżej błędu:Mam "Jedno ze źródeł do przypisania ma przeliczalny klucz w łańcuchu prototypów" w aplikacji natywnej React

HTTP Failure in Axios TypeError: One of the sources for assign has an enumerable key on the prototype chain. Are you trying to assign a prototype property? We don't allow it, as this is an edge case that we do not support. This error is a performance optimization and not spec compliant. 

Poniżej znajduje się kod Kiedyś dodać obiekt blob na formularzu danych:

let data = new FormData() 
    data.append('image', decodeBase64Image(image)); 

poniżej jest kod do dekodować obraz base64. A poniżej kod działa dobrze w jednej z moich aplikacji na stronie.

export const decodeBase64Image = (dataURI) => { 
    let byteString; 
    if (dataURI === undefined) { 
    return undefined 
    } 
    if (dataURI.split(',')[0].indexOf('base64') >= 0) 
    byteString = atob(dataURI.split(',')[1]); 
    else 
    byteString = unescape(dataURI.split(',')[1]); 

    // separate out the mime component 
    let mimeString = '' 
    if (dataURI.split(',')[0] != undefined && dataURI.split(',')[0].split(':')[1] != undefined) { 
    mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0] 
    } 
    // write the bytes of the string to a typed array 
    let ia = new Uint8Array(byteString.length); 
    for (let i = 0; i < byteString.length; i++) { 
    ia[i] = byteString.charCodeAt(i); 
    } 
    return new Blob([ia], {type: mimeString}); 
} 

Odpowiedz

0

Źródłem problemu jest to, że reagują Native deweloperów popełnił optymalizacji wydajności, który nie jest zgodny Spec-(dlatego kod działa na swojej stronie internetowej, ale nie swój React Native app). Aby uzyskać więcej informacji, zobacz problem, który otworzyłem tutaj: https://github.com/facebook/react-native/issues/16814

Jako obejście można użyć react-native-fetch-blob. Wystąpiłam z tym samym błędem, który popełniłeś, a metoda-native-fetch-blob rozwiązała go dla mnie.