zoukankan      html  css  js  c++  java
  • android访问服务器端上传及服务器端接收 .

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

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

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

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

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

    1. private TextView mTextView1;  

    1.   private TextView mTextView2;  
    2.   private Button mButton1;  
    3.    
    4.   @Override  
    5.   public void onCreate(Bundle savedInstanceState)  
    6.   {  
    7.     super.onCreate(savedInstanceState);  
    8.     setContentView(R.layout.main);  
    9.     mTextView1 = (TextView) findViewById(R.id.mTextView1);  
    10.     mTextView1.setText("FilePath:/n " + uploadFile);  
    11.     mTextView2 = (TextView) findViewById(R.id.mTextView2);  
    12.     //mTextView2.setText("UploadPath:/n " + actionUrl);   
    13.     /* 设定mButton的onClick事件处理 */  
    14.     mButton1 = (Button) findViewById(R.id.mButton1);  
    15.     mButton1.setOnClickListener(new View.OnClickListener()  
    16.     {  
    17.       public void onClick(View v)  
    18.       {  
    19.           uploadFile();  
    20.       }  
    21.     });  
    22.   }  
    23.   
    24.   
    25. private void uploadFile() {    
    26.       
    27.       String uploadUrl = "http://10.0.2.2:8080/upLoadFile/servlet/UpLoadFile";    
    28.       String end = "\r\n";    
    29.       String twoHyphens = "--";    
    30.       String boundary = "******";    
    31.       try {    
    32.           URL url = new URL(uploadUrl);    
    33.           HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();    
    34.           httpURLConnection.setDoInput(true);    
    35.           httpURLConnection.setDoOutput(true);    
    36.           httpURLConnection.setUseCaches(false);    
    37.           httpURLConnection.setRequestMethod("POST");    
    38.           httpURLConnection.setRequestProperty("Connection""Keep-Alive");    
    39.           httpURLConnection.setRequestProperty("Charset""UTF-8");    
    40.           httpURLConnection.setRequestProperty("Content-Type","multipart/form-data;boundary=" + boundary);    
    41.               
    42.           DataOutputStream dos = new DataOutputStream(httpURLConnection.getOutputStream());    
    43.           dos.writeBytes(twoHyphens + boundary + end);    
    44.           dos.writeBytes("Content-Disposition: form-data; name=\"file\"; filename=\""    
    45.           + srcPath.substring(srcPath.lastIndexOf("/") + 1) + "\"" + end);    
    46.           dos.writeBytes(end);    
    47.               
    48.           FileInputStream fis = new FileInputStream(srcPath);    
    49.           byte[] buffer = new byte[8192]; // 8k     
    50.           int count = 0;    
    51.           while ((count = fis.read(buffer)) != -1) {    
    52.               dos.write(buffer, 0, count);    
    53.           }  
    54.           Log.e("", dos.size()+"----------");  
    55.           fis.close();    
    56.               
    57.           dos.writeBytes(end);    
    58.           dos.writeBytes(twoHyphens + boundary + twoHyphens + end);    
    59.           dos.flush();    
    60.               
    61.           InputStream is = httpURLConnection.getInputStream();    
    62.           InputStreamReader isr = new InputStreamReader(is, "utf-8");    
    63.           BufferedReader br = new BufferedReader(isr);    
    64.           String result = br.readLine();    
    65.               
    66.           Toast.makeText(this, result, Toast.LENGTH_LONG).show();    
    67.           dos.close();    
    68.           is.close();    
    69.           
    70.       } catch (Exception e) {    
    71.           e.printStackTrace();    
    72.           setTitle(e.getMessage());    
    73.       }    
    74.       
    75.   }    
    76.     
    77. }  


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

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

    1. import java.io.FileOutputStream;  
    2. import java.io.IOException;  
    3. import javax.servlet.ServletException;  
    4. import javax.servlet.ServletInputStream;  
    5. import javax.servlet.http.HttpServlet;  
    6. import javax.servlet.http.HttpServletRequest;  
    7. import javax.servlet.http.HttpServletResponse;  

    1.   

    1.   

    1. public void doPost(HttpServletRequest request, HttpServletResponse response)  
    2.             throws ServletException, IOException {  
    3.           
    4.         //获取输入流,是HTTP协议中的实体内容   
    5.         ServletInputStream  in=request.getInputStream();  
    6.         //缓冲区   
    7.         byte buffer[]=new byte[1024];  
    8.         //写入服务器端固定路径磁盘中   
    9.         FileOutputStream out=new FileOutputStream("F:\\upload\\zzz.jpeg");  
    10.           
    11.         int len=in.read(buffer, 01024);  
    12.           
    13.         //把流里的信息循环读入到file文件中   
    14.         System.out.println(len+"+++++++++++++");  
    15.         while( len!=-1 ){  
    16.             System.out.println(len+"----------");  
    17.             out.write(buffer, 0, len);  
    18.             len=in.readLine(buffer, 01024);  
    19.             }  
    20.           
    21.         out.close();  
    22.           
    23.         in.close();  
    24. }  


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

  • 相关阅读:
    DS博客作业03--树
    DS博客作业02--栈和队列
    数据结构——线性表
    结构体
    C博客作业05--指针
    C语言博客作业04--数组
    面向对象设计大作业第二阶段:图书馆系统
    Java程序设计-有理数类的设计
    DS博客作业05-查找
    DS博客作业04-图
  • 原文地址:https://www.cnblogs.com/qingblog/p/2544799.html
Copyright © 2011-2022 走看看