wx_pmZ7777t 发表于 2017-7-31 17:25:05

Android 上传文件到服务器

http://bbs.zecoki.com/data/attachment/common/cf/102311q362klb36li21t72.png

摘自X神之怒博客

代码库
Android客户端

[*]view sourceprint?
[*]package com.example.testandroid;
[*]
[*]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 PhotoUpload extends Activity {
[*]    private String newName = "image.jpg";
[*]    private String uploadFile = "/sdcard/image.JPG";// 要上传的文件
[*]    private String actionUrl = "http://192.168.0.1:8080/PhotoUpload/servlet/UploadServlet";
[*]    private TextView mText1;
[*]    private TextView mText2;
[*]    private Button mButton;
[*]
[*]    @Override
[*]    public void onCreate(Bundle savedInstanceState) {
[*]      super.onCreate(savedInstanceState);
[*]      setContentView(R.layout.activity_main);
[*]      mText1 = (TextView) findViewById(R.id.myText2);
[*]      // 文件路径:
[*]      mText1.setText(uploadFile);
[*]      mText2 = (TextView) findViewById(R.id.myText3);
[*]      // 上传网址:
[*]      mText2.setText(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);
[*]
[*]            // 设置http连接属性
[*]            con.setRequestMethod("POST");
[*]            con.setRequestProperty("Connection", "Keep-Alive");
[*]            con.setRequestProperty("Charset", "UTF-8");
[*]            con.setRequestProperty("Content-Type",
[*]                  "multipart/form-data;boundary=" + boundary);
[*]
[*]            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;
[*]            int length = -1;
[*]            /* 从文件读取数据至缓冲区 */
[*]            while ((length = fStream.read(buffer)) != -1) {
[*]                /* 将资料写入DataOutputStream中 */
[*]                ds.write(buffer, 0, length);
[*]            }
[*]            ds.writeBytes(end);
[*]            ds.writeBytes(twoHyphens + boundary + twoHyphens + 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);
[*]            }
[*]            /* 将Response显示于Dialog */
[*]            showDialog("上传成功" + b.toString().trim());
[*]            /* 关闭DataOutputStream */
[*]            ds.close();
[*]      } catch (Exception e) {
[*]            showDialog("上传失败" + e);
[*]      }
[*]    }
[*]
[*]    /* 显示Dialog的method */
[*]    private void showDialog(String mess) {
[*]      new AlertDialog.Builder(PhotoUpload.this).setTitle("Message")
[*]                .setMessage(mess)
[*]                .setNegativeButton("确定", new DialogInterface.OnClickListener() {
[*]                  public void onClick(DialogInterface dialog, int which) {
[*]                  }
[*]                }).show();
[*]    }
[*]}



服务器端servlet

[*]package com.demo;
[*]
[*]import java.io.File;
[*]import java.io.IOException;
[*]import java.util.Date;
[*]import java.util.Iterator;
[*]import java.util.List;
[*]
[*]import javax.servlet.ServletException;
[*]import javax.servlet.http.HttpServlet;
[*]import javax.servlet.http.HttpServletRequest;
[*]import javax.servlet.http.HttpServletResponse;
[*]
[*]import org.apache.commons.fileupload.DiskFileUpload;
[*]import org.apache.commons.fileupload.FileItem;
[*]
[*]public class UploadServlet extends HttpServlet {
[*]    public void doPost(HttpServletRequest request, HttpServletResponse response)
[*]            throws ServletException, IOException {
[*]
[*]      String temp = request.getSession().getServletContext().getRealPath("/")
[*]                + "temp"; // 临时目录
[*]      System.out.println("temp=" + temp);
[*]      String loadpath = request.getSession().getServletContext()
[*]                .getRealPath("/")
[*]                + "Image"; // 上传文件存放目录
[*]      System.out.println("loadpath=" + loadpath);
[*]      DiskFileUpload fu = new DiskFileUpload(); // 需要导入commons-fileupload-1.2.2.jar
[*]                                                    // http://commons.apache.org/fileupload/
[*]      fu.setSizeMax(1 * 1024 * 1024); // 设置允许用户上传文件大小,单位:字节
[*]      fu.setSizeThreshold(4096); // 设置最多只允许在内存中存储的数据,单位:字节
[*]      fu.setRepositoryPath(temp); // 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录
[*]
[*]      // 开始读取上传信息
[*]      int index = 0;
[*]      List fileItems = null;
[*]
[*]      try {
[*]            fileItems = fu.parseRequest(request);
[*]            System.out.println("fileItems=" + fileItems);
[*]      } catch (Exception e) {
[*]            e.printStackTrace();
[*]      }
[*]
[*]      Iterator iter = fileItems.iterator(); // 依次处理每个上传的文件
[*]      while (iter.hasNext()) {
[*]            FileItem item = (FileItem) iter.next();// 忽略其他不是文件域的所有表单信息
[*]            if (!item.isFormField()) {
[*]                String name = item.getName();// 获取上传文件名,包括路径
[*]                name = name.substring(name.lastIndexOf("\") + 1);// 从全路径中提取文件名
[*]                long size = item.getSize();
[*]                if ((name == null || name.equals("")) && size == 0)
[*]                  continue;
[*]                int point = name.indexOf(".");
[*]                name = (new Date()).getTime()
[*]                        + name.substring(point, name.length()) + index;
[*]                index++;
[*]                File fNew = new File(loadpath, name);
[*]                try {
[*]                  item.write(fNew);
[*]                } catch (Exception e) {
[*]                  // TODO Auto-generated catch block
[*]                  e.printStackTrace();
[*]                }
[*]
[*]            } else// 取出不是文件域的所有表单信息
[*]            {
[*]                String fieldvalue = item.getString();
[*]                // 如果包含中文应写为:(转为UTF-8编码)
[*]                // String fieldvalue = new
[*]                // String(item.getString().getBytes(),"UTF-8");
[*]            }
[*]      }
[*]      String text1 = "11";
[*]      response.sendRedirect("result.jsp?text1=" + text1);
[*]    }}



activity_main.xml

[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]



来源:{http://bbs.zecoki.com/forum-70-1.html}
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: Android 上传文件到服务器