转:http://blog.csdn.net/explorerqp/article/details/7283295

最近在做一个android名片管理系统的demo,主要功能是与服务器端通信上传及下载数据。

android访问服务器端下载基本没什么问题,但是android上传到服务器遇到瓶颈。

android上传文件以数据流的形式上传,所以采用模拟http请求将文件以数据流的形式上传到服务器端,代码如下:

[java] view plain copy print ?
  1. </pre><prename="code"class="java">importjava.io.BufferedReader;
  2. importjava.io.DataOutputStream;
  3. importjava.io.File;
  4. importjava.io.FileInputStream;
  5. importjava.io.InputStream;
  6. importjava.io.InputStreamReader;
  7. importjava.net.HttpURLConnection;
  8. importjava.net.URL;
  9. importandroid.app.Activity;
  10. importandroid.os.Bundle;
  11. importandroid.os.Environment;
  12. importandroid.util.Log;
  13. importandroid.view.View;
  14. importandroid.widget.Button;
  15. importandroid.widget.TextView;
  16. importandroid.widget.Toast;
  17. publicclassmainActivityextendsActivity{
  18. /*
  19. *变量声明filename:上传后在服务器上的文件名称uploadFile:要上传的文件路径actionUrl:服务器上对应的程序路径
  20. */
  21. privateStringsrcPath=Environment.getExternalStorageDirectory().getAbsolutePath()+File.separator+"download"+
  22. File.separator+"tilocal.jpeg";
  23. privateStringnewName="tilocal.jpeg";
  24. //要上传的本地文件路径
  25. privateStringuploadFile=Environment.getExternalStorageDirectory().getAbsolutePath()+File.separator+"download"+
  26. File.separator+"tilocal.jpeg";
  27. //上传到服务器的指定位置(废弃,在uploadFile方法中写访问服务器路径)
  28. //privateStringactionUrl="http://192.168.3.10:8080//android/customer/upLoad.action";

[java] view plain copy print ?
  1. privateTextViewmTextView1;

[java] view plain copy print ?
  1. privateTextViewmTextView2;
  2. privateButtonmButton1;
  3. @Override
  4. publicvoidonCreate(BundlesavedInstanceState)
  5. {
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.main);
  8. mTextView1=(TextView)findViewById(R.id.mTextView1);
  9. mTextView1.setText("FilePath:/n"+uploadFile);
  10. mTextView2=(TextView)findViewById(R.id.mTextView2);
  11. //mTextView2.setText("UploadPath:/n"+actionUrl);
  12. /*设定mButton的onClick事件处理*/
  13. mButton1=(Button)findViewById(R.id.mButton1);
  14. mButton1.setOnClickListener(newView.OnClickListener()
  15. {
  16. publicvoidonClick(Viewv)
  17. {
  18. uploadFile();
  19. }
  20. });
  21. }
  22. privatevoiduploadFile(){
  23. StringuploadUrl="http://10.0.2.2:8080/upLoadFile/servlet/UpLoadFile";
  24. Stringend="\r\n";
  25. StringtwoHyphens="--";
  26. Stringboundary="******";
  27. try{
  28. URLurl=newURL(uploadUrl);
  29. HttpURLConnectionhttpURLConnection=(HttpURLConnection)url.openConnection();
  30. httpURLConnection.setDoInput(true);
  31. httpURLConnection.setDoOutput(true);
  32. httpURLConnection.setUseCaches(false);
  33. httpURLConnection.setRequestMethod("POST");
  34. httpURLConnection.setRequestProperty("Connection","Keep-Alive");
  35. httpURLConnection.setRequestProperty("Charset","UTF-8");
  36. httpURLConnection.setRequestProperty("Content-Type","multipart/form-data;boundary="+boundary);
  37. DataOutputStreamdos=newDataOutputStream(httpURLConnection.getOutputStream());
  38. dos.writeBytes(twoHyphens+boundary+end);
  39. dos.writeBytes("Content-Disposition:form-data;name=\"file\";filename=\""
  40. +srcPath.substring(srcPath.lastIndexOf("/")+1)+"\""+end);
  41. dos.writeBytes(end);
  42. FileInputStreamfis=newFileInputStream(srcPath);
  43. byte[]buffer=newbyte[8192];//8k
  44. intcount=0;
  45. while((count=fis.read(buffer))!=-1){
  46. dos.write(buffer,0,count);
  47. }
  48. Log.e("",dos.size()+"----------");
  49. fis.close();
  50. dos.writeBytes(end);
  51. dos.writeBytes(twoHyphens+boundary+twoHyphens+end);
  52. dos.flush();
  53. InputStreamis=httpURLConnection.getInputStream();
  54. InputStreamReaderisr=newInputStreamReader(is,"utf-8");
  55. BufferedReaderbr=newBufferedReader(isr);
  56. Stringresult=br.readLine();
  57. Toast.makeText(this,result,Toast.LENGTH_LONG).show();
  58. dos.close();
  59. is.close();
  60. }catch(Exceptione){
  61. e.printStackTrace();
  62. setTitle(e.getMessage());
  63. }
  64. }
  65. }


以上代码为android模拟http协议上传文件,以数据流的形式上传。

下面为服务器端servlet接收代码:

[java] view plain copy print ?
  1. importjava.io.FileOutputStream;
  2. importjava.io.IOException;
  3. importjavax.servlet.ServletException;
  4. importjavax.servlet.ServletInputStream;
  5. importjavax.servlet.http.HttpServlet;
  6. importjavax.servlet.http.HttpServletRequest;
  7. importjavax.servlet.http.HttpServletResponse;

[java] view plain copy print ?

[java] view plain copy print ?

[java] view plain copy print ?
  1. publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
  2. throwsServletException,IOException{
  3. //获取输入流,是HTTP协议中的实体内容
  4. ServletInputStreamin=request.getInputStream();
  5. //缓冲区
  6. bytebuffer[]=newbyte[1024];
  7. //写入服务器端固定路径磁盘中
  8. FileOutputStreamout=newFileOutputStream("F:\\upload\\zzz.jpeg");
  9. intlen=in.read(buffer,0,1024);
  10. //把流里的信息循环读入到file文件中
  11. System.out.println(len+"+++++++++++++");
  12. while(len!=-1){
  13. System.out.println(len+"----------");
  14. out.write(buffer,0,len);
  15. len=in.readLine(buffer,0,1024);
  16. }
  17. out.close();
  18. in.close();
  19. }


以上代码为粗糙的实现了android客户端与服务器端文件的上传功能。

更多相关文章

  1. android adb常用命令
  2. android访问服务器端上传及服务器端接收
  3. android上传图片至服务器
  4. Android(安卓)studio生成APK打包,修改生成APK的路径和名字
  5. Android(安卓)M 指纹框架
  6. 将 android sql文件放生成在sd卡
  7. Android(安卓)头像上传
  8. Android(安卓)SVG动画PathView源码解析与使用教程(API 14)
  9. android SDK系统图片资源的路径。

随机推荐

  1. Android(安卓)4.0 ICS SystemUI浅析——S
  2. android实现短信监听
  3. Android自定义dialog主题样式解析
  4. Android中GridView实现长按多选功能
  5. Android原生音量控制
  6. android 使用InstanceState保存和恢复数
  7. Android(安卓)Studio 使用技巧集锦
  8. Android(安卓)自定义View -- 圆形进度条,
  9. Android(安卓)限制显示小数点位数
  10. Android与H5页面的互调