エキテンのリニューアルを担当しているサービス開発部の鈴木セシル(@suzuki_cecil_)です。リニューアルプロジェクトに取り組んでおります。利用しているのですが、今回、Guzzleによるファイルのアップロードで少々苦戦することとなったためその時の内容を記事にまとめたいと思います。Optionsにmultipartを指定)POSTやPUTでファイルをアップロードするためには、Content-Typeをmultipart/form-dataにする必要があります。Optionsにmultipartを指定する方法が知られているかなと思います。Optionsをコンストラクタインジェクションもしくはメソッドインジェクションすることで柔軟にリクエストをカスタマイズすることが可能です。Optionsにmultipartを指定することで、multipart/form-dataを送信するようにカスタマイズしてあります。生成されていたのですが、生成されたファイルが壊れていました。バイナリデータを確認したところ、やはりヘッダ情報がバイナリデータに含まれていました。jpgのフォーマットに則っておらずファイルが壊れていると認識されていたのです。Optionsにmultipartを指定する方法でファイルのアップロードを行うことは可能であるはずなのですが、今回私が試したところ何故かファイルのバイナリデータにヘッダ情報が含まれてしまいました(今回、ファイルが壊れた理由は判明できていないです。Optionsにheadersを指定する方法でmultipart/form-dataを送信し、ファイルのアップロードを試みてみました。headersの項目を見つけました。Optionsにmultipartを指定するのではなくheadersとしてリクエストヘッダを直接定義することが可能なようでした。Optionsにheadersを指定するようにしたのがサンプルコード2です。作られている、またバイナリデータにheaderが含まれていないことが確認できました。Optionsのページのmultipartには以下のように記載があります。形式で設定します、とあるためサンプルコード1とサンプルコード2は同義だと思うのですが、サンプルコード1ではファイルのバイナリデータにヘッダ情報が含まれ、サンプルコード2ではファイルのバイナリデータにヘッダ情報が含まれないという結果となりました。形式で設定する方が安全であると考えます。仲間を募集しております募集中の職種については以下を御覧ください。»プロフィール店舗の口コミ・ランキングサイト「エキテン」を運営する、株式会社デザインワン・ジャパンの技術ブログです。9引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。