关于ZAKER 融媒体解决方案 合作 加入

ANDROID java.net.URLConnection 立即发送图像和数据

CocoaChina 10-22

我使用java.net.URLConnection 使用 POST 方法将图像和一些参数发送到服务器 . 我的下面的代码可以很好地将图像发送到服务器 , 但我有点困惑附加一些参数并一次发送到服务器 . 我遵循了herehere, 但我认为它与我的代码有不同的方法 .

这是我的代码段:

import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import android.app.Activity;import android.app.ProgressDialog;import android.util.Log;import android.widget.Toast;import com.yai.app.support.DialogHandler;public class ThreadImageUploader { private int serverResponseCode = 0; private ProgressDialog dialog; private Activity activity; public ThreadImageUploader ( ProgressDialog mProgressDialog, Activity mActivity ) { dialog = mProgressDialog; activity = mActivity; } public int uploadFile ( final String sourceFileUri, final String upLoadServerUri ) { String fileName = sourceFileUri; HttpURLConnection conn = null; DataOutputStream dos = null; String lineEnd = "rn"; String twoHyphens = "--"; String boundary = "*****"; int bytesRead, bytesAvailable, bufferSize; byte [ ] buffer; int maxBufferSize = 1 * 1024 * 1024; File sourceFile = new File ( sourceFileUri ) ; if ( !sourceFile.isFile ( ) ) { dialog.dismiss ( ) ; Log.e ( "uploadFile", "Source File not exist : " + sourceFileUri ) ; activity.runOnUiThread ( new Runnable ( ) { public void run ( ) { new DialogHandler ( ) .customDialog ( activity, "ERROR", "Source File not exist : " + sourceFileUri ) ; } } ) ; return 0; } else{ try { // open a URL connection to the Servlet FileInputStream fileInputStream = new FileInputStream ( sourceFile ) ; URL url = new URL ( upLoadServerUri ) ; // Open a HTTP connection to the URL conn = ( HttpURLConnection ) url.openConnection ( ) ; conn.setDoInput ( true ) ; // Allow Inputs conn.setDoOutput ( true ) ; // Allow Outputs conn.setUseCaches ( false ) ; // Don't use a Cached Copy conn.setRequestMethod ( "POST" ) ; conn.setRequestProperty ( "Connection", "Keep-Alive" ) ; conn.setRequestProperty ( "ENCTYPE", "multipart/form-data" ) ; conn.setRequestProperty ( "Content-Type", "multipart/form-data;boundary=" + boundary ) ; conn.setRequestProperty ( "uploaded_file", fileName ) ; dos = new DataOutputStream ( conn.getOutputStream ( ) ) ; dos.writeBytes ( twoHyphens + boundary + lineEnd ) ; dos.writeBytes ( "Content-Disposition: form-data; name='uploaded_file';filename='" + fileName + "'" + lineEnd ) ; dos.writeBytes ( lineEnd ) ; // create a buffer of maximum size bytesAvailable = fileInputStream.available ( ) ; bufferSize = Math.min ( bytesAvailable, maxBufferSize ) ; buffer = new byte [ bufferSize ] ; // read file and write it into form... bytesRead = fileInputStream.read ( buffer, 0, bufferSize ) ; while ( bytesRead > 0 ) { dos.write ( buffer, 0, bufferSize ) ; bytesAvailable = fileInputStream.available ( ) ; bufferSize = Math.min ( bytesAvailable, maxBufferSize ) ; bytesRead = fileInputStream.read ( buffer, 0, bufferSize ) ; } // send multipart form data necesssary after file data... dos.writeBytes ( lineEnd ) ; dos.writeBytes ( twoHyphens + boundary + twoHyphens + lineEnd ) ; // Responses from the server ( code and message ) serverResponseCode = conn.getResponseCode ( ) ; String serverResponseMessage = conn.getResponseMessage ( ) ; Log.i ( "uploadFile", "HTTP Response is : " + serverResponseMessage + ": " + serverResponseCode ) ; if ( serverResponseCode == 200 ) { activity.runOnUiThread ( new Runnable ( ) { public void run ( ) { String message = "File Upload Completed."; Toast.makeText ( activity, message, Toast.LENGTH_SHORT ) .show ( ) ; } } ) ; } //close the streams // fileInputStream.close ( ) ; dos.flush ( ) ; dos.close ( ) ; } catch ( MalformedURLException ex ) { dialog.dismiss ( ) ; ex.printStackTrace ( ) ; activity.runOnUiThread ( new Runnable ( ) { public void run ( ) { Toast.makeText ( activity, "MalformedURLException : : check script url.", Toast.LENGTH_SHORT ) .show ( ) ; } } ) ; Log.e ( "Upload file to server", "error: " + ex.getMessage ( ) , ex ) ; } catch ( Exception e ) { dialog.dismiss ( ) ; e.printStackTrace ( ) ; activity.runOnUiThread ( new Runnable ( ) { public void run ( ) { Toast.makeText ( activity, "Got Exception : see logcat ", Toast.LENGTH_SHORT ) .show ( ) ; } } ) ; Log.e ( "Upload file to server Exception", "Exception : " + e.getMessage ( ) , e ) ; } dialog.dismiss ( ) ; return serverResponseCode; } } }

我如何一次性将图像和一些参数发送到服务器?

非常感谢 .

最佳答案

最后 , 这里解决了我的问题 . 下面的代码片段可用于上传图像并将文本发送到服务器 . 也许这篇文章可以帮助别人 : )

这是代码:

public int uploadFile ( final String sourceFileUri, final String upLoadServerUri, final String renameFile ) { HttpURLConnection conn = null; DataOutputStream dos = null; String lineEnd = "rn"; String twoHyphens = "--"; String boundary = "*****"; int bytesRead, bytesAvailable, bufferSize; byte [ ] buffer; int maxBufferSize = 1 * 1024 * 1024; File sourceFile = new File ( sourceFileUri ) ; if ( !sourceFile.isFile ( ) ) { dialog.dismiss ( ) ; Log.e ( "uploadFile", "Source File not exist : " + sourceFileUri ) ; activity.runOnUiThread ( new Runnable ( ) { public void run ( ) { new DialogHandler ( ) .customDialog ( activity, "ERROR", "Source File not exist : " + sourceFileUri ) ; } } ) ; return 0; } else{ try { // open a URL connection to the Servlet FileInputStream fileInputStream = new FileInputStream ( sourceFile ) ; URL url = new URL ( upLoadServerUri ) ; // Open a HTTP connection to the URL conn = ( HttpURLConnection ) url.openConnection ( ) ; conn.setDoInput ( true ) ; // Allow Inputs conn.setDoOutput ( true ) ; // Allow Outputs conn.setUseCaches ( false ) ; // Don't use a Cached Copy conn.setRequestMethod ( "POST" ) ; conn.setRequestProperty ( "Connection", "Keep-Alive" ) ; conn.setRequestProperty ( "ENCTYPE", "multipart/form-data" ) ; conn.setRequestProperty ( "Content-Type", "multipart/form-data;boundary=" + boundary ) ; conn.setRequestProperty ( "uploaded_file", renameFile ) ; dos = new DataOutputStream ( conn.getOutputStream ( ) ) ; // add parameters dos.writeBytes ( twoHyphens + boundary + lineEnd ) ; dos.writeBytes ( "Content-Disposition: form-data; name="type"" + lineEnd ) ; dos.writeBytes ( lineEnd ) ; // assign value dos.writeBytes ( "Your value" ) ; dos.writeBytes ( lineEnd ) ; dos.writeBytes ( twoHyphens + boundary + lineEnd ) ; // send image dos.writeBytes ( twoHyphens + boundary + lineEnd ) ; dos.writeBytes ( "Content-Disposition: form-data; name='uploaded_file';filename='" + renameFile + "'" + lineEnd ) ; dos.writeBytes ( lineEnd ) ; // create a buffer of maximum size bytesAvailable = fileInputStream.available ( ) ; bufferSize = Math.min ( bytesAvailable, maxBufferSize ) ; buffer = new byte [ bufferSize ] ; // read file and write it into form... bytesRead = fileInputStream.read ( buffer, 0, bufferSize ) ; while ( bytesRead > 0 ) { dos.write ( buffer, 0, bufferSize ) ; bytesAvailable = fileInputStream.available ( ) ; bufferSize = Math.min ( bytesAvailable, maxBufferSize ) ; bytesRead = fileInputStream.read ( buffer, 0, bufferSize ) ; } // send multipart form data necesssary after file data... dos.writeBytes ( lineEnd ) ; dos.writeBytes ( twoHyphens + boundary + twoHyphens + lineEnd ) ; // Responses from the server ( code and message ) serverResponseCode = conn.getResponseCode ( ) ; String serverResponseMessage = conn.getResponseMessage ( ) ; Log.i ( "uploadFile", "HTTP Response is : " + serverResponseMessage + ": " + serverResponseCode ) ; if ( serverResponseCode == 200 ) { activity.runOnUiThread ( new Runnable ( ) { public void run ( ) { String message = "File Upload Completed."; Toast.makeText ( activity, message, Toast.LENGTH_SHORT ) .show ( ) ; } } ) ; } //close the streams // fileInputStream.close ( ) ; dos.flush ( ) ; dos.close ( ) ; } catch ( MalformedURLException ex ) { dialog.dismiss ( ) ; ex.printStackTrace ( ) ; activity.runOnUiThread ( new Runnable ( ) { public void run ( ) { Toast.makeText ( activity, "MalformedURLException : : check script url.", Toast.LENGTH_SHORT ) .show ( ) ; } } ) ; Log.e ( "Upload file to server", "error: " + ex.getMessage ( ) , ex ) ; } catch ( Exception e ) { dialog.dismiss ( ) ; e.printStackTrace ( ) ; activity.runOnUiThread ( new Runnable ( ) { public void run ( ) { Toast.makeText ( activity, "Got Exception : see logcat ", Toast.LENGTH_SHORT ) .show ( ) ; } } ) ; Log.e ( "Upload file to server Exception", "Exception : " + e.getMessage ( ) , e ) ; } dialog.dismiss ( ) ; return serverResponseCode; } }

以上内容由"CocoaChina"上传发布 查看原文
相关标签 dosandroid数据图像

觉得文章不错,微信扫描分享好友

扫码分享