android访问服务器端上传及服务器端接收 .
16lz
2021-01-23
转:http://blog.csdn.net/explorerqp/article/details/7283295
最近在做一个android名片管理系统的demo,主要功能是与服务器端通信上传及下载数据。
android访问服务器端下载基本没什么问题,但是android上传到服务器遇到瓶颈。
android上传文件以数据流的形式上传,所以采用模拟http请求将文件以数据流的形式上传到服务器端,代码如下:
[java] view plain copy print ?- </pre><prename="code"class="java">importjava.io.BufferedReader;
- importjava.io.DataOutputStream;
- importjava.io.File;
- importjava.io.FileInputStream;
- importjava.io.InputStream;
- importjava.io.InputStreamReader;
- importjava.net.HttpURLConnection;
- importjava.net.URL;
- importandroid.app.Activity;
- importandroid.os.Bundle;
- importandroid.os.Environment;
- importandroid.util.Log;
- importandroid.view.View;
- importandroid.widget.Button;
- importandroid.widget.TextView;
- importandroid.widget.Toast;
- publicclassmainActivityextendsActivity{
- /*
- *变量声明filename:上传后在服务器上的文件名称uploadFile:要上传的文件路径actionUrl:服务器上对应的程序路径
- */
- privateStringsrcPath=Environment.getExternalStorageDirectory().getAbsolutePath()+File.separator+"download"+
- File.separator+"tilocal.jpeg";
- privateStringnewName="tilocal.jpeg";
- //要上传的本地文件路径
- privateStringuploadFile=Environment.getExternalStorageDirectory().getAbsolutePath()+File.separator+"download"+
- File.separator+"tilocal.jpeg";
- //上传到服务器的指定位置(废弃,在uploadFile方法中写访问服务器路径)
- //privateStringactionUrl="http://192.168.3.10:8080//android/customer/upLoad.action";
- privateTextViewmTextView1;
- privateTextViewmTextView2;
- privateButtonmButton1;
- @Override
- publicvoidonCreate(BundlesavedInstanceState)
- {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- mTextView1=(TextView)findViewById(R.id.mTextView1);
- mTextView1.setText("FilePath:/n"+uploadFile);
- mTextView2=(TextView)findViewById(R.id.mTextView2);
- //mTextView2.setText("UploadPath:/n"+actionUrl);
- /*设定mButton的onClick事件处理*/
- mButton1=(Button)findViewById(R.id.mButton1);
- mButton1.setOnClickListener(newView.OnClickListener()
- {
- publicvoidonClick(Viewv)
- {
- uploadFile();
- }
- });
- }
- privatevoiduploadFile(){
- StringuploadUrl="http://10.0.2.2:8080/upLoadFile/servlet/UpLoadFile";
- Stringend="\r\n";
- StringtwoHyphens="--";
- Stringboundary="******";
- try{
- URLurl=newURL(uploadUrl);
- HttpURLConnectionhttpURLConnection=(HttpURLConnection)url.openConnection();
- httpURLConnection.setDoInput(true);
- httpURLConnection.setDoOutput(true);
- httpURLConnection.setUseCaches(false);
- httpURLConnection.setRequestMethod("POST");
- httpURLConnection.setRequestProperty("Connection","Keep-Alive");
- httpURLConnection.setRequestProperty("Charset","UTF-8");
- httpURLConnection.setRequestProperty("Content-Type","multipart/form-data;boundary="+boundary);
- DataOutputStreamdos=newDataOutputStream(httpURLConnection.getOutputStream());
- dos.writeBytes(twoHyphens+boundary+end);
- dos.writeBytes("Content-Disposition:form-data;name=\"file\";filename=\""
- +srcPath.substring(srcPath.lastIndexOf("/")+1)+"\""+end);
- dos.writeBytes(end);
- FileInputStreamfis=newFileInputStream(srcPath);
- byte[]buffer=newbyte[8192];//8k
- intcount=0;
- while((count=fis.read(buffer))!=-1){
- dos.write(buffer,0,count);
- }
- Log.e("",dos.size()+"----------");
- fis.close();
- dos.writeBytes(end);
- dos.writeBytes(twoHyphens+boundary+twoHyphens+end);
- dos.flush();
- InputStreamis=httpURLConnection.getInputStream();
- InputStreamReaderisr=newInputStreamReader(is,"utf-8");
- BufferedReaderbr=newBufferedReader(isr);
- Stringresult=br.readLine();
- Toast.makeText(this,result,Toast.LENGTH_LONG).show();
- dos.close();
- is.close();
- }catch(Exceptione){
- e.printStackTrace();
- setTitle(e.getMessage());
- }
- }
- }
以上代码为android模拟http协议上传文件,以数据流的形式上传。
下面为服务器端servlet接收代码:
[java] view plain copy print ?- importjava.io.FileOutputStream;
- importjava.io.IOException;
- importjavax.servlet.ServletException;
- importjavax.servlet.ServletInputStream;
- importjavax.servlet.http.HttpServlet;
- importjavax.servlet.http.HttpServletRequest;
- importjavax.servlet.http.HttpServletResponse;
- publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
- throwsServletException,IOException{
- //获取输入流,是HTTP协议中的实体内容
- ServletInputStreamin=request.getInputStream();
- //缓冲区
- bytebuffer[]=newbyte[1024];
- //写入服务器端固定路径磁盘中
- FileOutputStreamout=newFileOutputStream("F:\\upload\\zzz.jpeg");
- intlen=in.read(buffer,0,1024);
- //把流里的信息循环读入到file文件中
- System.out.println(len+"+++++++++++++");
- while(len!=-1){
- System.out.println(len+"----------");
- out.write(buffer,0,len);
- len=in.readLine(buffer,0,1024);
- }
- out.close();
- in.close();
- }
以上代码为粗糙的实现了android客户端与服务器端文件的上传功能。
更多相关文章
- android访问服务器端上传及服务器端接收
- android上传图片至服务器
- Android studio生成APK打包,修改生成APK的路径和名字
- android SDK系统图片资源的路径。
- 2011.09.09 ——— android 2.2 修改安装路径
- 更改Android AVD模拟器创建路径位置的方法
- 面向UDP的Android——PC双向通信(二):实现Android客户端和PC服务器
- Android上传下载文件(图片)
- Android 存储路径浅析