Android实现上传文件功能的方法
本文所述为一个Android上传文件的源代码,每一步实现过程都备有详尽的注释,思路比较清楚,学习了本例所述上传文件代码之后,你可以应对其它格式文件的上传。实例中主要实现上传文件至Server的方法,允许Input、Output,不使用Cache,使Androiod上传文件变得轻松。
主要功能代码如下:
packagecom.test; importjava.io.DataOutputStream; importjava.io.FileInputStream; importjava.io.InputStream; importjava.net.HttpURLConnection; importjava.net.URL; importandroid.app.Activity; importandroid.app.AlertDialog; importandroid.content.DialogInterface; importandroid.os.Bundle; importandroid.view.View; importandroid.widget.Button; importandroid.widget.TextView; publicclassMainextendsActivity{ /*变量声明 *newName:上传后在服务器上的文件名称 *uploadFile:要上传的文件路径 *actionUrl:服务器上对应的程序路径*/ privateStringnewName="image.jpg"; privateStringuploadFile="/data/image.jpg"; privateStringactionUrl="http://l27.0.0.1/upload/upload.jsp"; privateTextViewmText1; privateTextViewmText2; privateButtonmButton; @Override publicvoidonCreate(BundlesavedInstanceState) { 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(newView.OnClickListener() { publicvoidonClick(Viewv) { uploadFile(); } }); } /*上传文件至Server的方法*/ privatevoiduploadFile() { Stringend="\r\n"; StringtwoHyphens="--"; Stringboundary="*****"; try { URLurl=newURL(actionUrl); HttpURLConnectioncon=(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*/ DataOutputStreamds= newDataOutputStream(con.getOutputStream()); ds.writeBytes(twoHyphens+boundary+end); ds.writeBytes("Content-Disposition:form-data;"+ "name=\"file1\";filename=\""+ newName+"\""+end); ds.writeBytes(end); /*取得文件的FileInputStream*/ FileInputStreamfStream=newFileInputStream(uploadFile); /*设置每次写入1024bytes*/ intbufferSize=1024; byte[]buffer=newbyte[bufferSize]; intlength=-1; /*从文件读取数据至缓冲区*/ while((length=fStream.read(buffer))!=-1) { /*将资料写入DataOutputStream中*/ ds.write(buffer,0,length); } ds.writeBytes(end); ds.writeBytes(twoHyphens+boundary+twoHyphens+end); /*closestreams*/ fStream.close(); ds.flush(); /*取得Response内容*/ InputStreamis=con.getInputStream(); intch; StringBufferb=newStringBuffer(); while((ch=is.read())!=-1) { b.append((char)ch); } /*将Response显示于Dialog*/ showDialog(b.toString().trim()); /*关闭DataOutputStream*/ ds.close(); } catch(Exceptione) { showDialog(""+e); } } /*显示Dialog的method*/ privatevoidshowDialog(Stringmess) { newAlertDialog.Builder(Main.this).setTitle("Message") .setMessage(mess) .setNegativeButton("确定",newDialogInterface.OnClickListener() { publicvoidonClick(DialogInterfacedialog,intwhich) { } }) .show(); } }
读者如果觉得功能不足的话可以对代码进行扩展与完善,使之更加符合自身的应用需求。