HttpEntity を使用せずに Volley でマルチパート POST リクエストを実行する方法
Volley は、HTTP リクエストを作成するための人気のある Android ライブラリです。以前の API バージョンでは、HttpEntity はマルチパート フォーム データの送信に Volley と組み合わせて使用されていました。ただし、API 22 で HttpEntity が非推奨となり、API 23 で完全に削除されたため、開発者には課題が残されています。
この記事では、 HttpEntity.提供されたコードを使用すると、テキスト データとともに複数のファイルをアップロードできます。
コードの概要
ここで説明する実装は、MultipartActivity と MultipartRequest の 2 つのクラスで構成されます。 MultipartActivity はマルチパート フォーム データの準備を処理しますが、MultipartRequest は Volley の Request クラスを拡張し、マルチパート ボディの処理とサーバー応答の処理に必要なメソッドをオーバーライドします。
使用法
このソリューションを利用するには、次の手順に従います。 :
- URL、mimeType、multipart を指定して MultipartRequest のインスタンスを作成します。本文と応答リスナー。
- getParams() を使用して追加のテキスト パラメーターを追加します。
- 関連するファイルまたはデータを含む DataPart オブジェクトを生成し、それらを getByteData() メソッドに追加します。
- 次を使用して、MultipartRequest を Volley のリクエスト キューに追加します。 addToRequestQueue().
コード例
MultipartActivity.java:
import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.widget.Toast; import com.android.volley.NetworkResponse; import com.android.volley.Response; import com.android.volley.VolleyError; import com.example.multipartvolley.MultipartRequest; import com.example.multipartvolley.VolleySingleton; import java.util.HashMap; import java.util.Map; public class MultipartActivity extends Activity { private Context context = this; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Assuming you have prepared file data in fileData1 and fileData2 String url = "http://192.168.1.100/api/postfile"; MultipartRequest multipartRequest = new MultipartRequest(url, null, "multipart/form-data", multipartBody, new Response.Listener<networkresponse>() { @Override public void onResponse(NetworkResponse response) { Toast.makeText(context, "Upload successfully!", Toast.LENGTH_SHORT).show(); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Toast.makeText(context, "Upload failed!\r\n" + error.toString(), Toast.LENGTH_SHORT).show(); } }) { @Override protected Map<string string> getParams() { Map<string string> params = new HashMap(); params.put("text_field1", "Value for text field 1"); params.put("text_field2", "Value for text field 2"); return params; } @Override protected Map<string datapart> getByteData() { Map<string datapart> params = new HashMap(); params.put("file_name1", new DataPart("file_name1.txt", "file content 1".getBytes(), "text/plain")); params.put("file_name2", new DataPart("file_name2.png", fileData1, "image/png")); return params; } }; VolleySingleton.getInstance(context).addToRequestQueue(multipartRequest); } }</string></string></string></string></networkresponse>
MultipartRequest.java:
import com.android.volley.AuthFailureError; import com.android.volley.NetworkResponse; import com.android.volley.ParseError; import com.android.volley.Request; import com.android.volley.Response; import com.android.volley.VolleyError; import com.android.volley.toolbox.HttpHeaderParser; import java.util.HashMap; import java.util.Map; class MultipartRequest extends Request<networkresponse> { private final Response.Listener<networkresponse> mListener; private final Response.ErrorListener mErrorListener; private Map<string string> mHeaders; private Map<string datapart> mByteData; MultipartRequest(String url, Map<string string> headers, String contentType, Map<string datapart> byteData, Response.Listener<networkresponse> listener, Response.ErrorListener errorListener) { super(Method.POST, url, errorListener); this.mListener = listener; this.mErrorListener = errorListener; this.mHeaders = headers; this.mByteData = byteData; } @Override public Map<string string> getHeaders() throws AuthFailureError { return mHeaders != null ? mHeaders : super.getHeaders(); } @Override public String getBodyContentType() { return "multipart/form-data; boundary=" + getBoundary(); } @Override public byte[] getBody() throws AuthFailureError { return encodeMultipartData(mByteData, getBoundary()); } private String getBoundary() { return Long.toHexString(System.currentTimeMillis()); } @Override protected Response<networkresponse> parseNetworkResponse(NetworkResponse response) { try { return Response.success( response, HttpHeaderParser.parseCacheHeaders(response)); } catch (Exception e) { return Response.error(new ParseError(e)); } } @Override protected void deliverResponse(NetworkResponse response) { mListener.onResponse(response); } @Override public void deliverError(VolleyError error) { mErrorListener.onErrorResponse(error); } protected static byte[] encodeMultipartData(Map<string datapart> dataParts, String boundary) { ByteArrayOutputStream bos = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(bos); try { for (Map.Entry<string datapart> entry : dataParts.entrySet()) { dos.writeBytes(twoHyphens + boundary + lineEnd); dos.writeBytes("Content-Disposition: form-data; name=\"" + entry.getKey() + "\"" + "; filename=\"" + entry.getValue().getFileName() + "\"" + lineEnd); dos.writeBytes(String.format("Content-Type: %s%s", entry.getValue().getType(), lineEnd)); dos.writeBytes(lineEnd); dos.write(entry.getValue().getContent()); dos.writeBytes(lineEnd); } dos.writeBytes(lineEnd); dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); return bos.toByteArray(); } catch (IOException e) { e.printStackTrace(); return null; } } class DataPart { private String fileName; private byte[] content; private String type; DataPart(String fileName, byte[] content, String type) { this.fileName = fileName; this.content = content; this.type = type; } String getFileName() { return fileName; } byte[] getContent() { return content; } String getType() { return type; } } }</string></string></networkresponse></string></networkresponse></string></string></string></string></networkresponse></networkresponse>
このコードは次の処理を行いますファイルとテキストの両方のパラメーターをサーバーに安全に渡すことができるマルチパート フォーム データ リクエスト。最終的なコードは本番環境で使用するものではないため、特定の要件に応じて変更する必要があることに注意することが重要です。
以上がHttpEntity を使用せずに Volley でマルチパート POST リクエストを行う方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Javaは、プラットフォームの独立性により、エンタープライズレベルのアプリケーションで広く使用されています。 1)プラットフォームの独立性は、Java Virtual Machine(JVM)を介して実装されているため、Javaをサポートする任意のプラットフォームでコードを実行できます。 2)クロスプラットフォームの展開と開発プロセスを簡素化し、柔軟性とスケーラビリティを高めます。 3)ただし、パフォーマンスの違いとサードパーティライブラリの互換性に注意を払い、純粋なJavaコードやクロスプラットフォームテストの使用などのベストプラクティスを採用する必要があります。

javaplaysasificanificantduetduetoitsplatformindepence.1)itallowscodetobewrittendunonvariousdevices.2)java'secosystemprovidesutionforiot.3)そのセキュリティフィートルセンハンス系

TheSolution to HandlefilepathsaCrosswindossandlinuxinjavaistousepaths.get()fromthejava.nio.filepackage.1)usesystem.getProperty( "user.dir")およびhearterativepathtoconstructurctthefilepath.2)

java'splatformentepenceissificAntiveSifcuseDeverowsDevelowSowRitecodeOdeonceantoniTONAnyPlatformwsajvm.これは「writeonce、runanywhere」(wora)adportoffers:1)クロスプラットフォームの複雑性、deploymentacrossdiferentososwithusisues; 2)re

Javaは、クロスサーバーWebアプリケーションの開発に適しています。 1)Javaの「Write and、Run Averywhere」哲学は、JVMをサポートするあらゆるプラットフォームでコードを実行します。 2)Javaには、開発プロセスを簡素化するために、SpringやHibernateなどのツールを含む豊富なエコシステムがあります。 3)Javaは、パフォーマンスとセキュリティにおいて優れたパフォーマンスを発揮し、効率的なメモリ管理と強力なセキュリティ保証を提供します。

JVMは、バイトコード解釈、プラットフォームに依存しないAPI、動的クラスの負荷を介してJavaのWORA機能を実装します。 2。標準API抽象オペレーティングシステムの違い。 3.クラスは、実行時に動的にロードされ、一貫性を確保します。

Javaの最新バージョンは、JVMの最適化、標準的なライブラリの改善、サードパーティライブラリサポートを通じて、プラットフォーム固有の問題を効果的に解決します。 1)Java11のZGCなどのJVM最適化により、ガベージコレクションのパフォーマンスが向上します。 2)Java9のモジュールシステムなどの標準的なライブラリの改善は、プラットフォーム関連の問題を削減します。 3)サードパーティライブラリは、OpenCVなどのプラットフォーム最適化バージョンを提供します。

JVMのバイトコード検証プロセスには、4つの重要な手順が含まれます。1)クラスファイル形式が仕様に準拠しているかどうかを確認し、2)バイトコード命令の有効性と正確性を確認し、3)データフロー分析を実行してタイプの安全性を確保し、検証の完全性とパフォーマンスのバランスをとる。これらの手順を通じて、JVMは、安全で正しいバイトコードのみが実行されることを保証し、それによりプログラムの完全性とセキュリティを保護します。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

ドリームウィーバー CS6
ビジュアル Web 開発ツール

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。
