当前位置: 移动技术网 > IT编程>移动开发>Android > Android实现上传文件功能的方法

Android实现上传文件功能的方法

2019年07月24日  | 移动技术网IT编程  | 我要评论

焦灵花,卓京系,证婚人证婚词

本文所述为一个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();
  }
}

读者如果觉得功能不足的话可以对代码进行扩展与完善,使之更加符合自身的应用需求。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网