6

前もって感謝します。Android アプリからビットマップ画像をアップロードしたいと思います。しかし、私はそれを得ることができません。いくつかの解決策をお勧めします。または私のソースコードを収集しますか?

ByteArrayOutputStream bao = new ByteArrayOutputStream();
                bitmap.compress(Bitmap.CompressFormat.JPEG, 90, bao);
                HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost(
                        "http://example.com/imagestore/post");
                MultipartEntity entity = new MultipartEntity( HttpMultipartMode.BROWSER_COMPATIBLE );
                byte [] ba = bao.toByteArray();
                try {
                    entity.addPart("img", new StringBody(new String(bao.toByteArray())));
                    httppost.setEntity(entity);
                } catch (UnsupportedEncodingException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                // Execute HTTP Post Request
                HttpResponse response = null;
                try {
                    response = httpclient.execute(httppost);
                } catch (ClientProtocolException e) {
}
4

2 に答える 2

3

画像のアップロードに httpmime を使用
する
http://vikaskanani.wordpress.com/2011/01/11/android-upload-image-or-file-using-http-post-multi-part/

于 2011-03-14T07:12:35.413 に答える
1

このソリューションは非常によく作成されており、Amazon ec2 でも 100% 動作することがわかりました。次のリンクをご覧ください。

Android で POST を使用して HTTP サーバーにファイルをアップロードする (リンクは削除されました)。

前の回答と比較して、このソリューションではApache から巨大なライブラリをインポートする必要はありません。httpmime

元の記事からコピーされたテキスト:

このチュートリアルでは、Android SDK を使用して HTTP/PHP サーバーにデータ (画像、MP3、テキスト ファイルなど) をアップロードする簡単な方法を示します。

これには、Android 側でアップロードを機能させるために必要なすべてのコードと、ファイルのアップロードと保存を処理する PHP の単純なサーバー側コードが含まれています。さらに、ファイルをアップロードする際の基本的な認証の処理方法についても説明します。

エミュレーターでテストするときは、DDMS またはコマンド ライン経由でテスト ファイルを Android のファイル システムに追加することを忘れないでください。

これから行うことは、リクエストの適切なコンテンツ タイプを設定し、投稿の本文としてバイト配列を含めることです。バイト配列には、サーバーに送信するファイルの内容が含まれます。

以下に、アップロード操作を実行する便利なコード スニペットを示します。このコードには、サーバーの応答処理も含まれています。

HttpURLConnection connection = null;
DataOutputStream outputStream = null;
DataInputStream inputStream = null;
String pathToOurFile = "/data/file_to_send.mp3";
String urlServer = "http://192.168.1.1/handle_upload.php";
String lineEnd = "\r\n";
String twoHyphens = "--";
String boundary =  "*****";

int bytesRead, bytesAvailable, bufferSize;
byte[] buffer;
int maxBufferSize = 1*1024*1024;

try
{
    FileInputStream fileInputStream = new FileInputStream(new File(pathToOurFile) );

    URL url = new URL(urlServer);
    connection = (HttpURLConnection) url.openConnection();

    // Allow Inputs & Outputs.
    connection.setDoInput(true);
    connection.setDoOutput(true);
    connection.setUseCaches(false);

    // Set HTTP method to POST.
    connection.setRequestMethod("POST");

    connection.setRequestProperty("Connection", "Keep-Alive");
    connection.setRequestProperty("Content-Type", "multipart/form-data;boundary="+boundary);

    outputStream = new DataOutputStream( connection.getOutputStream() );
    outputStream.writeBytes(twoHyphens + boundary + lineEnd);
    outputStream.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\"" + pathToOurFile +"\"" + lineEnd);
    outputStream.writeBytes(lineEnd);

    bytesAvailable = fileInputStream.available();
    bufferSize = Math.min(bytesAvailable, maxBufferSize);
    buffer = new byte[bufferSize];

    // Read file
    bytesRead = fileInputStream.read(buffer, 0, bufferSize);

    while (bytesRead > 0)
    {
        outputStream.write(buffer, 0, bufferSize);
        bytesAvailable = fileInputStream.available();
        bufferSize = Math.min(bytesAvailable, maxBufferSize);
        bytesRead = fileInputStream.read(buffer, 0, bufferSize);
    }

    outputStream.writeBytes(lineEnd);
    outputStream.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);

    // Responses from the server (code and message)
    serverResponseCode = connection.getResponseCode();
    serverResponseMessage = connection.getResponseMessage();

    fileInputStream.close();
    outputStream.flush();
    outputStream.close();
}
catch (Exception ex)
{
    //Exception handling
}

ファイルのアップロード中にユーザー名とパスワードでユーザーを認証する必要がある場合は、以下のコード スニペットにその追加方法を示します。必要なのは、接続の作成時に Authorization ヘッダーを設定することだけです。

String usernamePassword = yourUsername + “:” + yourPassword;
String encodedUsernamePassword = Base64.encodeToString(usernamePassword.getBytes(), Base64.DEFAULT);
connection.setRequestProperty (“Authorization”, “Basic ” + encodedUsernamePassword);

PHP スクリプトがサーバー側でデータを受信する役割を担っているとしましょう。このような PHP スクリプトのサンプルは次のようになります。

<?php
$target_path  = "./";
$target_path = $target_path . basename( $_FILES['uploadedfile']['name']);
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) 
{
    echo "The file ".  basename( $_FILES['uploadedfile']['name']).
 " has been uploaded";
} 
else
{
    echo "There was an error uploading the file, please try again!";
}
?>;

コードは Android 2.1 および 4.3 でテストされました。サーバー側でスクリプトに権限を追加することを忘れないでください。そうしないと、アップロードが機能しません。

chmod 777 uploadsfolder

uploadsfolder は、ファイルがアップロードされるフォルダーです。デフォルトの 2MB のファイル サイズ制限を超えるファイルをアップロードする場合。php.ini ファイルの upload_max_filesize 値を変更する必要があります。

于 2011-06-14T15:14:56.463 に答える