2016-10-10 9 views
2

私はWebで使用されているreducexアクションを持っています。これらのアクションをネイティブプロジェクトに使用しているため、Webとネイティブの間でロジックを共有し、コンポーネントのみを変更することができます。ネイティブファイルコンストラクタに反応します

これらの操作の1つ(画像のアップロード)は、パラメータとしてFileをとります。反応したネイティブのイメージ情報を取得する方法を管理しました。私たちはreact-native-image-pickerを使用しています。ユーザーが画像を選択すると、すべてのデータを含む応答が返されます。

let file = new File([atob(response.data)], 
     response.fileName, 
     {type: response.type}) 

しかし、これは反応ネイティブでは機能しません。ウェブ上にはFileコンストラクタがありません。 Fileにいくつかの代替案を使用することはできません.Webとネイティブの間で共有されるreducexアクションは、Fileを予期しているためです。

反応ネイティブでFileを作成するにはどうすればよいですか?

+1

[react-native-fetch-blob](https://github.com/wkh237/react-native-fetch-blob/blob/master/README.md)ウェブポリフィル。 – Xeijp

答えて

0

AFAIK Webでもファイルを作成することはできません。Object.keys()でFileオブジェクトのキーを取得しようとすると、何も表示されません。ブラウザ上のファイルが、何あなたが実際に使用することができますすることで、エンドポイントからデータを取得している場合には、使用基本的にバイナリラージオブジェクトファイル、メモリ内のファイルで、Blobです:

fetch('/endpoint') 
.then(res) { 
    res.blob() 
} 
.then(blob) { 
// Do whatever you want with your blob 
} 

場合ではありませんすることができますnew Blob([response.data], {type: response.type}) ブロブには名前がありませんので、後でライブラリでそれを処理してください。

このライブラリhttps://github.com/wkh237/react-native-fetch-blobとドキュメントhttps://github.com/wkh237/react-native-fetch-blob/wiki/File-System-Access-APIは役に立ちます