Android实现上传文件功能的方法
程序员文章站
2022-05-16 12:53:31
本文所述为一个android上传文件的源代码,每一步实现过程都备有详尽的注释,思路比较清楚,学习了本例所述上传文件代码之后,你可以应对其它格式文件的上传。实例中主要实现上传...
本文所述为一个android上传文件的源代码,每一步实现过程都备有详尽的注释,思路比较清楚,学习了本例所述上传文件代码之后,你可以应对其它格式文件的上传。实例中主要实现上传文件至server的方法,允许input、output,不使用cache,使androiod上传文件变得轻松。
主要功能代码如下:
package com.test; import java.io.dataoutputstream; import java.io.fileinputstream; import java.io.inputstream; import java.net.httpurlconnection; import java.net.url; import android.app.activity; import android.app.alertdialog; import android.content.dialoginterface; import android.os.bundle; import android.view.view; import android.widget.button; import android.widget.textview; public class main extends activity { /* 变量声明 * newname:上传后在服务器上的文件名称 * uploadfile:要上传的文件路径 * actionurl:服务器上对应的程序路径 */ private string newname="image.jpg"; private string uploadfile="/data/image.jpg"; private string actionurl="http://l27.0.0.1/upload/upload.jsp"; private textview mtext1; private textview mtext2; private button mbutton; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); mtext1 = (textview) findviewbyid(r.id.mytext2); mtext1.settext("文件路径:\n"+uploadfile); mtext2 = (textview) findviewbyid(r.id.mytext3); mtext2.settext("上传网址:\n"+actionurl); /* 设置mbutton的onclick事件处理 */ mbutton = (button) findviewbyid(r.id.mybutton); mbutton.setonclicklistener(new view.onclicklistener() { public void onclick(view v) { uploadfile(); } }); } /* 上传文件至server的方法 */ private void uploadfile() { string end = "\r\n"; string twohyphens = "--"; string boundary = "*****"; try { url url =new url(actionurl); httpurlconnection con=(httpurlconnection)url.openconnection(); /* 允许input、output,不使用cache */ con.setdoinput(true); con.setdooutput(true); con.setusecaches(false); /* 设置传送的method=post */ con.setrequestmethod("post"); /* setrequestproperty */ con.setrequestproperty("connection", "keep-alive"); con.setrequestproperty("charset", "utf-8"); con.setrequestproperty("content-type", "multipart/form-data;boundary="+boundary); /* 设置dataoutputstream */ dataoutputstream ds = new dataoutputstream(con.getoutputstream()); ds.writebytes(twohyphens + boundary + end); ds.writebytes("content-disposition: form-data; " + "name=\"file1\";filename=\"" + newname +"\"" + end); ds.writebytes(end); /* 取得文件的fileinputstream */ fileinputstream fstream = new fileinputstream(uploadfile); /* 设置每次写入1024bytes */ int buffersize = 1024; byte[] buffer = new byte[buffersize]; int length = -1; /* 从文件读取数据至缓冲区 */ while((length = fstream.read(buffer)) != -1) { /* 将资料写入dataoutputstream中 */ ds.write(buffer, 0, length); } ds.writebytes(end); ds.writebytes(twohyphens + boundary + twohyphens + end); /* close streams */ fstream.close(); ds.flush(); /* 取得response内容 */ inputstream is = con.getinputstream(); int ch; stringbuffer b =new stringbuffer(); while( ( ch = is.read() ) != -1 ) { b.append( (char)ch ); } /* 将response显示于dialog */ showdialog(b.tostring().trim()); /* 关闭dataoutputstream */ ds.close(); } catch(exception e) { showdialog(""+e); } } /* 显示dialog的method */ private void showdialog(string mess) { new alertdialog.builder(main.this).settitle("message") .setmessage(mess) .setnegativebutton("确定",new dialoginterface.onclicklistener() { public void onclick(dialoginterface dialog, int which) { } }) .show(); } }
读者如果觉得功能不足的话可以对代码进行扩展与完善,使之更加符合自身的应用需求。