简单实现Android文件上传
文件上传在B/S应用中是一种十分常见的功能,那么在Android平台下是否可以实现像B/S那样的文件上传功能呢?答案是肯定的。下面是一个模拟网站程序上传文件的例子。
首先新建一个Android工程,新建主启动Activity:
MainActivity.java:
packagecom.xzq.upload; importjava.io.DataOutputStream; importjava.io.FileInputStream; importjava.io.InputStream; importjava.net.HttpURLConnection; importjava.net.URL; importandroid.app.Activity; importandroid.os.Bundle; importandroid.view.View; importandroid.widget.Button; importandroid.widget.TextView; importandroid.widget.Toast; publicclassMainActivityextendsActivity{ privateStringnewName="htys.mp3"; //要上传的本地文件路径 privateStringuploadFile="/data/data/com.xzq/htys.mp3"; //上传到服务器的指定位置 privateStringactionUrl="http://192.168.100.100:8080/upload/upload.jsp"; privateTextViewmTextView1; privateTextViewmTextView2; privateButtonmButton1; @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); mTextView1=(TextView)findViewById(R.id.myText2); mTextView1.setText("FilePath:/n"+uploadFile); mTextView2=(TextView)findViewById(R.id.myText3); mTextView2.setText("UploadPath:/n"+actionUrl); /*设定mButton的onClick事件处理*/ mButton1=(Button)findViewById(R.id.myButton); mButton1.setOnClickListener(newView.OnClickListener(){ publicvoidonClick(Viewv){ uploadFile(); } }); } privatevoiduploadFile(){ Stringend="/r/n"; StringHyphens="--"; 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(Hyphens+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(Hyphens+boundary+Hyphens+end); fStream.close(); ds.flush(); /*取得Response内容*/ InputStreamis=con.getInputStream(); intch; StringBufferb=newStringBuffer(); while((ch=is.read())!=-1){ b.append((char)ch); } System.out.println("上传成功"); Toast.makeText(MainActivity.this,"上传成功",Toast.LENGTH_LONG) .show(); ds.close(); }catch(Exceptione){ System.out.println("上传失败"+e.getMessage()); Toast.makeText(MainActivity.this,"上传失败"+e.getMessage(), Toast.LENGTH_LONG).show(); } } }
最后别忘了在AndroidManifest.xml中设置访问Internet的权限:
<uses-permissionandroid:name="android.permission.INTERNET"/>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。