[解決済み] HttpPostによる画像送信
質問
アンドロイドクライアントからDjangoサーバーにHttpPostで画像を送りたいです。画像はギャラリーから選択されます。現在、私はサーバーに必要なデータを送信するためにリスト値名ペアを使用しており、JSONでDjangoから応答を受信しています。同じアプローチを画像に使うことはできますか (画像の URL を JSON のレスポンスに埋め込む)?
また、サーバからダウンロードせずにリモートで画像にアクセスする方法と、ダウンロードしてBitmap配列に格納し、ローカルで使用する方法、どちらが良いのでしょうか?画像は数が少なく(<10)、サイズも小さい(50*50 dip)です。
これらの問題に取り組むための任意のチュートリアルは、非常に高く評価されます。
編集:ギャラリーから選択された画像は、必要なサイズにスケーリングした後、サーバーに送信されます。
どのように解決するのですか?
アップロードしたい画像のパスとファイル名がわかっていることを前提に説明します。この文字列をあなたの
NameValuePair
を使って
image
をキー名とします。
画像の送信は
HttpComponents ライブラリ
. 最新の HttpClient をダウンロードします(現在
4.0.1
) のバイナリを依存関係パッケージと一緒にダウンロードし
apache-mime4j-0.6.jar
と
httpmime-4.0.1.jar
をプロジェクトに追加し、Javaのビルドパスに追加してください。
クラスには以下のインポートを追加する必要があります。
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
これで
MultipartEntity
を作成して、POST リクエストに画像を添付することができます。次のコードは、その方法の例を示しています。
public void post(String url, List<NameValuePair> nameValuePairs) {
HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpPost httpPost = new HttpPost(url);
try {
MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
for(int index=0; index < nameValuePairs.size(); index++) {
if(nameValuePairs.get(index).getName().equalsIgnoreCase("image")) {
// If the key equals to "image", we use FileBody to transfer the data
entity.addPart(nameValuePairs.get(index).getName(), new FileBody(new File (nameValuePairs.get(index).getValue())));
} else {
// Normal string data
entity.addPart(nameValuePairs.get(index).getName(), new StringBody(nameValuePairs.get(index).getValue()));
}
}
httpPost.setEntity(entity);
HttpResponse response = httpClient.execute(httpPost, localContext);
} catch (IOException e) {
e.printStackTrace();
}
}
これで少しは正しい方向に向かうといいのですが。
関連
-
[解決済み】Android 8:クリアテキストのHTTPトラフィックが許可されない
-
[解決済み] HTTP GET(リクエストボディ付き
-
[解決済み] java.net.URLConnectionを使用してHTTPリクエストを発生させ処理する方法
-
[解決済み] HTTP POSTリクエストでは、どのようにパラメータが送信されるのですか?
-
[解決済み] updateとdeleteのHTTPステータスコード?
-
[解決済み] カスタムHTTPヘッダー:命名規則
-
[解決済み] リソースが既に存在する場合の POST に対する HTTP レスポンスコード
-
[解決済み] node.jsでHTTP POSTリクエストはどのように行われるのですか?
-
[解決済み] POSTとPUT HTTP REQUESTの違いは何ですか?
-
[解決済み】HTTPのPOSTとPUTの違いは何ですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】AndroidでPOSTデータを送信する方法
-
[解決済み] アンドロイドフラグメント onRestoreInstanceState
-
[解決済み] Android ConstraintLayout - あるビューを別のビューの上に配置する
-
[解決済み] ViewPagerのアイテムを強制的に再インスタンス化する方法 [重複].
-
[解決済み] EclipseのAndroidプロジェクトにライブラリ/JARを追加する
-
[解決済み] 非ActivityクラスでContextを取得する [重複].
-
[解決済み] カスタムレイアウトとEditTextを持つAlertDialog.Builderは、ビューにアクセスすることができません。
-
[解決済み] サポート(v21)ツールバーを使用した環境設定画面の作成
-
[解決済み] DialogFragment の setCancelable プロパティが機能しない
-
[解決済み] RelativeLayout は LinearLayout よりも高価ですか?