[解決済み] AndroidでVolleyを使ってmultipart/form-dataのPOSTを送信する方法
質問
誰か
multipart/form-data
のPOST送信を実現された方はいらっしゃいますか?をアップロードしようとしてもうまくいきません。
image/png
をサーバーに POST リクエストでアップロードすることに成功したことがないので、成功した人がいるかどうか知りたいと思っています。
これを行うためのデフォルトの方法は
public byte[] getPostBody()
の中で
Request.java
クラスをアタッチし
File
を追加し、境界の Header キーを空白にします。しかし、私のファイルを変換して
String
に対して
Map<String, String> postParams
に変換し、それを再びエンコードさせるのは難解で、あまりエレガントではありません。 また、私はこの試みに失敗しています。これが、このライブラリへの切り替えを躊躇させている唯一の理由です。
とにかく、すべての考えと回答は非常に感謝されます。助けていただきありがとうございます。
どのように解決するのですか?
間違っているかも知れませんが、自分で実装する必要があると思います。
com.android.volley.toolbox.HttpStack
を実装する必要があると思います。なぜなら、デフォルトのもの (
HurlStack
というのは、バージョン > Gingerbread または
HttpClientStack
) を処理しません。
multipart/form-data
.
編集してください。
そして、確かに私は間違っていました。私はそれを使用することができました
MultipartEntity
を使うことができました。
public class MultipartRequest extends Request<String> {
private MultipartEntity entity = new MultipartEntity();
private static final String FILE_PART_NAME = "file";
private static final String STRING_PART_NAME = "text";
private final Response.Listener<String> mListener;
private final File mFilePart;
private final String mStringPart;
public MultipartRequest(String url, Response.ErrorListener errorListener, Response.Listener<String> listener, File file, String stringPart)
{
super(Method.POST, url, errorListener);
mListener = listener;
mFilePart = file;
mStringPart = stringPart;
buildMultipartEntity();
}
private void buildMultipartEntity()
{
entity.addPart(FILE_PART_NAME, new FileBody(mFilePart));
try
{
entity.addPart(STRING_PART_NAME, new StringBody(mStringPart));
}
catch (UnsupportedEncodingException e)
{
VolleyLog.e("UnsupportedEncodingException");
}
}
@Override
public String getBodyContentType()
{
return entity.getContentType().getValue();
}
@Override
public byte[] getBody() throws AuthFailureError
{
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try
{
entity.writeTo(bos);
}
catch (IOException e)
{
VolleyLog.e("IOException writing to ByteArrayOutputStream");
}
return bos.toByteArray();
}
@Override
protected Response<String> parseNetworkResponse(NetworkResponse response)
{
return Response.success("Uploaded", getCacheEntry());
}
@Override
protected void deliverResponse(String response)
{
mListener.onResponse(response);
}
}
かなり生々しいですが、画像と簡単な文字列で試したところ、うまくいきました。レスポンスはプレースホルダーで、この場合Response Stringを返すのはあまり意味がない。MultipartEntityを使うのにapache httpmimeを使うと問題があったので、次のようにしました。 https://code.google.com/p/httpclientandroidlib/ を使いましたが、もっといい方法があるかどうかわかりません。 それが役立つことを願っています。
Edit
httpclientandroidlibを使わなくてもhttpmimeを使うことができます。依存関係はhttpcoreだけです。
関連
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] AndroidのListViewで画像を遅延ロードする方法
-
[解決済み] Androidで画面の大きさをピクセル単位で取得する方法
-
[解決済み] HTTP POSTリクエストでは、どのようにパラメータが送信されるのですか?
-
[解決済み] Androidアプリケーションのアクティビティ間でデータを受け渡すにはどうすればよいですか?
-
[解決済み] application/x-www-form-urlencoded or multipart/form-data?
-
[解決済み] アンドロイドフラグメント onRestoreInstanceState
-
[解決済み] これはどういうことですか?失敗 [INSTALL_FAILED_CONTAINER_ERROR]?
-
[解決済み] Androidアプリケーションのヒープサイズを大きくするには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 設定ページに移動せずに位置情報サービスをオンにする
-
[解決済み] SDカードからファイルを削除する方法を教えてください。
-
[解決済み] Android - タイトルバーに戻るボタンが表示される
-
[解決済み] Androidでマイナスマージンを使用するのは悪いことですか?
-
[解決済み] 「KotlinとAndroidで「パラメータTを推測するのに十分な情報がありません。
-
[解決済み] アンドロイドアプリのユーザーデータを消去する
-
[解決済み] TabLayoutに対応したandroidデザインでタブテキストのフォントを変更する
-
[解決済み] AsyncTaskLoaderとAsyncTaskの比較
-
[解決済み] google-services.jsonって実際何してるの?
-
[解決済み] ブルートゥースアプリケーションのテストにアンドロイドエミュレータを使用するには?