ios側からFirebaseFunctions経由でStripeへ画像ファイルをアップロードしようと試みています。
しかしfunctionsのエラーを確認すると
Unhandled error Error: ENOENT: no such file or directory, open 'file:///var/mobile/Containers/Data/Application/CD695EC3-A2C5-4BCD-8341-8B785BA94F14/Documents/FrontSide_Img'
と返ってきてしまいます。
ios側で画像は下記の方法でアプリ内のdocumentに保存しています。
Swift
1 2 let fileURL = FileManager.default.urls(for: .documentDirectory, 3 in: .userDomainMask)[0] 4 .appendingPathComponent("fileName") 5 do { 6 try img.pngData()!.write(to: fileURL) 7 } catch { 8 print("エラー") 9 } 10 11
アプリ内のdocumentに正しく保存されているのかの確認は
実機をmacへ接続しDevicesandSimulatorから
iphone内のDocumentsからダウンロードし画像が保存されている事は確認いたしました。
iosからからファイルアップロード
let fileURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] .appendingPathComponent(fileName) do { try img.pngData()!.write(to: fileURL) let data: [String: Any] = ["path": fileURL.absoluteString, "fileName": fileName] functions.httpsCallable("createFiles") .call(data, completion: { result, error in if let err = error { print("err") } else { print(result) } })
サーバー側のコードは下記になります
exports.createFiles = functions.https.onCall(async (data, context) => { const fp = fs.readFileSync(data.path); return stripe.files.create({ file: { data: fp, name: data.fileName, type: 'application.octet-stream', }, purpose: 'dispute_evidence', }); });
ファイルパスが怪しいような気がしますがするのでStripeのリファレンスのパスの記載します
またリファレンスには
A file to upload. The file should follow the specifications of RFC 2388 (which defines file transfers for the multipart/form-data protocol).
と書かれているのですが、この仕様が満たせているのかも分からない状態です。
Stripe var fp = fs.readFileSync('/path/to/a/file.jpg'); 私のパス file:///var/mobile/Containers/Data/Application/CD695EC3-A2C5-4BCD-8341-8B785BA94F14/Documents/FrontSide_Img
あなたの回答
tips
プレビュー