搜索
热搜: 活动 交友 discuz
查看: 60930|回复: 0

[默认设置] Android 上传文件到服务器

  [复制链接]

0

主题

0

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2017-7-31 17:25:05 | 显示全部楼层 |阅读模式


摘自X神之怒博客

[android]代码库
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[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);

  •             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}
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




上一篇:Android4.4 增加/system/priv-app 跟 原来的/system/app 的区别
下一篇:Fastboot专业解释
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

抖音账号
关注抖音
加入粉丝群,抽取论坛金币


Archiver|手机版|小黑屋|IT趣-GEEK社区

GMT+8, 2024-11-24 04:36 , Processed in 0.113586 second(s), 23 queries .

Powered by Discuz! X3.4. 技术支持 by 巅峰设计

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表