欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

简单实现Android文件上传

程序员文章站 2024-02-25 18:47:03
文件上传在b/s应用中是一种十分常见的功能,那么在android平台下是否可以实现像b/s那样的文件上传功能呢?答案是肯定的。下面是一个模拟网站程序上传文件的例子。...

文件上传在b/s应用中是一种十分常见的功能,那么在android平台下是否可以实现像b/s那样的文件上传功能呢?答案是肯定的。下面是一个模拟网站程序上传文件的例子。

首先新建一个android工程,新建主启动activity:

mainactivity.java:

package com.xzq.upload;

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.os.bundle;
import android.view.view;
import android.widget.button;
import android.widget.textview;
import android.widget.toast;

public class mainactivity extends activity{

 private string newname = "htys.mp3";
 //要上传的本地文件路径
 private string uploadfile = "/data/data/com.xzq/htys.mp3";
 //上传到服务器的指定位置
 private string actionurl = "http://192.168.100.100:8080/upload/upload.jsp";
 private textview mtextview1;
 private textview mtextview2;
 private button mbutton1;

 @override
 public void oncreate(bundle savedinstancestate){
  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(new view.onclicklistener(){
   public void onclick(view v){
    uploadfile();
   }
  });
 }

 private void uploadfile(){
  string end = "/r/n";
  string hyphens = "--";
  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(hyphens + 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(hyphens + boundary + hyphens + end);
   fstream.close();
   ds.flush();
   /* 取得response内容 */
   inputstream is = con.getinputstream();
   int ch;
   stringbuffer b = new stringbuffer();
   while ((ch = is.read()) != -1){
    b.append((char) ch);
   }
   system.out.println("上传成功");
   toast.maketext(mainactivity.this, "上传成功", toast.length_long)
     .show();
   ds.close();
  } catch (exception e){
   system.out.println("上传失败" + e.getmessage());
   toast.maketext(mainactivity.this, "上传失败" + e.getmessage(),
     toast.length_long).show();
  }
 }
}

最后别忘了在androidmanifest.xml中设置访问internet的权限:

 <uses-permission android:name="android.permission.internet" />

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。