質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Stripe

Stripeとは、米国のオンライン決済システム提供企業、及び同社が提供する決裁システムを指します。Webサイトやモバイルアプリにコードを組み込むことでクレジットカードなどの決済サービスが簡潔に追加できます。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

0回答

775閲覧

【Swift】iosからstripeへファイルのアップロードがうまくいかない

ttah

総合スコア35

Stripe

Stripeとは、米国のオンライン決済システム提供企業、及び同社が提供する決裁システムを指します。Webサイトやモバイルアプリにコードを組み込むことでクレジットカードなどの決済サービスが簡潔に追加できます。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2021/05/22 00:05

編集2021/05/23 00:16

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

Stripe API
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2021/05/22 21:06

iOS 上のファイルのパスを送ってる (ファイルの中身を送ってない) ように見えますが、気のせいでしょうか?
ttah

2021/05/23 00:21

ファイルパスとファイル名しか送る必要ないと思っていたのですが、中身()画像データを送る必要はあるのでしょうか?(Strioe APIを追記しました。)
hoshi-takanori

2021/05/23 00:44 編集

Stripe よく分かりませんが、Stripe API を叩いてるのは Firebase Functions のサーバー上ですよね。サーバー上では Stripe API にサーバー上にあるファイルのパスを渡せばいいのでしょうけど、iOS から Firebase Functions を呼ぶ際に iOS 上のファイルのパスを渡してるように見えるので、サーバー上には存在しないファイルのパスを Stripe API に渡してるのでは…。
ttah

2021/05/23 04:45

有難うございます。そういう事だったんですね! FireStoregeに画像をアップして、変えてきたURLを.absoluteStringしfileiパスとして渡してみましたが 同じエラーだったんですが これはサーバー上にあるファイルパスを渡せていないという事になるでしょうか?
hoshi-takanori

2021/05/23 05:01

dispute_evidence って、支払いに関する秘匿性の高い画像ではないかと想像するのですが、そんなものを Storage に保存して大丈夫でしょうか? 万が一、他の人に見えたりしたらやばいのでは?
ttah

2021/05/23 05:07

画像をサーバーにアップロードしたことがなかったのと、秘匿性が高いデータを管理方法の知識が現段階では不足していたので、取りあえず目的のファイルパスを通すということを達成するためにStoregeを使用しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問