web-dev-qa-db-ja.com

multipart / form-dataをJSON + Base64よりも優れた方法で使用していますか?

サーバーがあり、クライアントからサーバーにいくつかのフィールドとともにファイルをアップロードする必要があります。私は現在、標準のmultipart/form-dataを使用しています。

ただし、multipart/form-dataの使用は理想的ではないことがわかりました。サーバー上のオブジェクトには、他のオブジェクトがネストされている可能性があるため、他のJSONオブジェクトが埋め込まれたJSONオブジェクトとして表されます。

クライアントが、サーバーへのGETリクエストで期待されるのとまったく同じようにJSON表現を使用してPOST/PUTリクエストの作成をRESTフルな方法で開始したいと思います。このようにして、multipart/form-dataを使用するために、JSONオブジェクト内のいくつかのレイヤーにネストされている可能性のあるフィールドをフラット化する必要はありません。

問題は、JSONがバイナリデータを表していないことです。 Multipart/form-dataには、他のフィールドの値内にネストされたフィールドを表す方法がないようです。ただし、ファイルのアップロードの処理ははるかに優れています。

私はこれをどのように設計するか途方に暮れています。クライアントにbase64でエンコードされたフィールドを含むJSONをアップロードさせ、25%のヒットを取得する必要がありますか?または、Multipart/form-dataリクエストでJSONオブジェクトをある種の「json」変数として表現し、バイナリファイルを別の変数としてアップロードする必要がありますか?

22
genixpro

クライアントにbase64でエンコードされたフィールドを含むJSONをアップロードさせ、25%のヒットを取得する必要がありますか?

4/3 = 1.33なので、ヒット率は33%になります。

または、Multipart/form-dataリクエストでJSONオブジェクトをある種の「json」変数として表現し、バイナリファイルを別の変数としてアップロードする必要がありますか?

これはうまくいくはずです。

このアプローチを検討することもできます。マルチパートを使用してすべてのファイルを送信し、応答としてファイルの識別子を取得します。この識別子をjsonに入れて、好きなように送信します。このアプローチは、ファイルを送信するシナリオが多数ある場合に役立つ可能性があります。常に同じ要求でファイルをサーバーに送信してから、それらの識別子を取得する場合があります。その後、あなたが好きなことを彼らとやりなさい。

10
Anton Ryabyh