☕
Androidからファイルを送信できない [Network request failed]
問題内容
Expoでスマホからサーバーに画像送信する機能を実装中に発生
iOSでexpo-image-pickerで画像選択して、サーバーに送信完了!!
動作問題なし!
↓
Androidでもできると思い動作確認!
エラー発生! Error: Network request failed
え...なんで?? Network??
今後もAndroidだと動かないみたいなところは発生しうるので
対応方法を備忘として残します。
環境
ReactNative(Expo)
Expo SDK v44
問題箇所と対応
formDataのtypeを明記しないとエラーが発生するっぽい。(動作確認はしていない)
type: "file" or "image"で指定してformDataを実装していたが、iOSでは問題なくAndroidではエラーが発生することがわかった。
以下記事を参考にmime typeを使って実装する方法で対応しました。
const formData = new FormData();
formData.append("data", {
uri: fileItem.uri,
name: fileItem.uri.split("/").pop(),
- type: "file",
+ type: mime.getType(fileItem.uri),
});
参考サイト
使用ライブラリ
最後に
本来はfileやimageで指定していたことがよくない気もしますが、ネイティブアプリの開発経験がなくOS毎にファイルタイプが違うだろうなぁ。わかんねえぁ。曖昧にしとこうかなぁ。くらいの気持ちだったので反省...
mimeについてもあまり理解している訳でもないのでこの辺を理解して今後の実装時には配慮してよりよく実装していきたい。
Discussion