背景
インターネット上の Java サーバーにアップロードされているものがたくさんあります。長い間検索した結果、php にアップロードされたものを見つけました。 POSTすることを考えました。早速、上記のコードを見てみましょう。
PHP コード
PHP コード
-
- $target_path = "./upload/" ; //ファイルディレクトリを受信します
- $target_path = $target_path .basename ( $_FILES [ 'uploadedfile' ][ 'name' ]); 🎜>
if (move_uploaded_file( $_FILES [ 'uploadedfile' ][ 'tmp_name' ], $target_path )) { -
echo "ファイル " . name' ]). " アップロードされました" ; -
echo "ファイルのアップロード中にエラーが発生しました。もう一度お試しください。" . 'エラー' ]; -
} -
?>
-
-
Android コード
アップロードされたメインコード:
Java コード
- private void UploadFile(String UploadUrl)
- {
- 文字列 end = "rn" ;
- 文字列 twoHyphens = "--" ;
文字列境界 = "******" ; -
-
{ -
URL url = 新しい URL(uploadUrl); HttpURLConnection httpURLConnection = (HttpURLConnection) url -
.openConnection(); //http connection -
// 各送信のストリーム サイズを設定すると、メモリ不足による電話のクラッシュを効果的に防ぐことができます -
-
httpURLConnection.setChunkedStreamingMode( 128 * 1024 ) // 128K -
// 入力ストリームと出力ストリームを許可します -
httpURL Connection.setDoInput( true ); 🎜> - httpURLConnection.setDoOutput( true );
- httpURLConnection.setUseCaches( false );
- // POST メソッドを使用します
- httpURLConnection.setRequestMethod( "POST" );
- httpURLConnection.setRequestProperty( "Connection" , "Keep-Alive" ); // 接続を常に維持します
- httpURLConnection.setRequestProperty( "Charset" , "UTF-8" ); //エンコーディング
- httpURLConnection.setRequestProperty( "Content-Type" ,
- "multipart/form-data;boundary=" +boundary); //POST は過去のエンコーディングを渡します
-
- DataOutputStream dos = new DataOutputStream(
- httpURLConnection.getOutputStream()) //出力ストリーム
- dos.writeBytes(twoHyphens + border + end); >
dos.writeBytes( "Content-Disposition: form-data; name="uploadedfile"; filename="" -
+ srcPath.substring(srcPath.lastIndexOf( "/" ) + 1 ) -
+ """ -
+ end); -
dos.writeBytes(end); -
-
FileInputStream fis = new FileInputStream( src Path); // ファイル入力ストリーム、メモリに書き込まれます -
byte [] バッファ = 新しいバイト [ 8192 ] // 8k -
int count = 0; // ファイル -
を読み取ります while ((count = fis.read(buffer)) != - 1 ) -
{ -
dos.write(buffer, 0, count) ; -
} - fis.close();
-
- dos.writeBytes(end);
- dos.writeBytes(twoHyphens + 境界 + twoHyphens + end) ;
- dos.flush();
-
- InputStream is = httpURLConnection.getInputStream(); //http 入力、返された結果を取得します
- InputStreamReader isr = new InputStreamReader(is, "utf-8" );
- BufferedReader br = new BufferedReader(isr);
- 文字列結果 = br.readLine(); 🎜>
Toast.makeText( this , result, Toast.LENGTH_LONG).show(); // 結果を出力 -
dos.close(); ; -
-
} catch (Exception e) -
{ .getMessage ()); AsyncTask を使用しましょう~-
非同期タスクportal: http://www.cnblogs.com/yydcdut/p/3707960.html -
このクラスにアップロード操作を入れます doInBackground には、どれだけアップロードされたかを示す ProgressDialog を含めることができます: -
- Java コード
-
// ファイルを読み取ります -
bytesRead = fileInputStream.read(buffer, 0,bufferSize); - while (bytesRead > 0 ) {
OutputStream.write(buffer, 0,bufferSize);
length + =bufferSize
progress = ( int ) ((長さ * 100 ) / totalSize);
bytesAva ilable = fileInputStream .available(); Math.min(bytesAvailable, maxBufferSize);
bytesRead(buffer, 0,bufferSize);
- OutputStream.writeBytes(lineEnd); >
- また、権限にも注意してください:
-
XML/HTML コード-
- < uses-permission android:name = "android .permission.インターネット" />
-
-
-