宅科技 - 科技,宅出新生活

搜索
热搜: 活动 交友 discuz
如果你还没有论坛的账号,赶快注册吧!
立即注册

合作站点账号登陆

快捷导航
查看: 4886|回复: 0

[知识点] Android 上传文件到服务器

[复制链接] [提交至百度]

94

主题

107

帖子

2042

积分

传奇人物

Rank: 6Rank: 6

积分
2042
发表于 2017-7-31 17:25:05 | 显示全部楼层 |阅读模式
扫码领红包
本帖最后由 wx_pmZ7777t 于 2017-7-31 17:27 编辑

摘自X神之怒博客

[android]代码库
Android客户端
  1. view sourceprint?
  2. package com.example.testandroid;

  3. import java.io.DataOutputStream;
  4. import java.io.FileInputStream;
  5. import java.io.InputStream;
  6. import java.net.HttpURLConnection;
  7. import java.net.URL;

  8. import android.app.Activity;
  9. import android.app.AlertDialog;
  10. import android.content.DialogInterface;
  11. import android.os.Bundle;
  12. import android.view.View;
  13. import android.widget.Button;
  14. import android.widget.TextView;

  15. public class PhotoUpload extends Activity {
  16.     private String newName = "image.jpg";
  17.     private String uploadFile = "/sdcard/image.JPG";// 要上传的文件
  18.     private String actionUrl = "http://192.168.0.1:8080/PhotoUpload/servlet/UploadServlet";
  19.     private TextView mText1;
  20.     private TextView mText2;
  21.     private Button mButton;

  22.     @Override
  23.     public void onCreate(Bundle savedInstanceState) {
  24.         super.onCreate(savedInstanceState);
  25.         setContentView(R.layout.activity_main);
  26.         mText1 = (TextView) findViewById(R.id.myText2);
  27.         // 文件路径:
  28.         mText1.setText(uploadFile);
  29.         mText2 = (TextView) findViewById(R.id.myText3);
  30.         // 上传网址:
  31.         mText2.setText(actionUrl);
  32.         /* 设置mButton的onClick事件处理 */
  33.         mButton = (Button) findViewById(R.id.myButton);
  34.         mButton.setOnClickListener(new View.OnClickListener() {
  35.             public void onClick(View v) {
  36.                 uploadFile();
  37.             }
  38.         });
  39.     }

  40.     /* 上传文件至Server的方法 */
  41.     private void uploadFile() {
  42.         String end = "\r\n";
  43.         String twoHyphens = "--";
  44.         String boundary = "*****";
  45.         try {
  46.             URL url = new URL(actionUrl);
  47.             HttpURLConnection con = (HttpURLConnection) url.openConnection();
  48.             /* 允许Input、Output,不使用Cache */
  49.             con.setDoInput(true);
  50.             con.setDoOutput(true);
  51.             con.setUseCaches(false);

  52.             // 设置http连接属性
  53.             con.setRequestMethod("POST");
  54.             con.setRequestProperty("Connection", "Keep-Alive");
  55.             con.setRequestProperty("Charset", "UTF-8");
  56.             con.setRequestProperty("Content-Type",
  57.                     "multipart/form-data;boundary=" + boundary);

  58.             DataOutputStream ds = new DataOutputStream(con.getOutputStream());
  59.             ds.writeBytes(twoHyphens + boundary + end);
  60.             ds.writeBytes("Content-Disposition: form-data; "
  61.                     + "name="file1";filename="" + newName + """ + end);
  62.             ds.writeBytes(end);

  63.             // 取得文件的FileInputStream
  64.             FileInputStream fStream = new FileInputStream(uploadFile);
  65.             /* 设置每次写入1024bytes */
  66.             int bufferSize = 1024;
  67.             byte[] buffer = new byte[bufferSize];
  68.             int length = -1;
  69.             /* 从文件读取数据至缓冲区 */
  70.             while ((length = fStream.read(buffer)) != -1) {
  71.                 /* 将资料写入DataOutputStream中 */
  72.                 ds.write(buffer, 0, length);
  73.             }
  74.             ds.writeBytes(end);
  75.             ds.writeBytes(twoHyphens + boundary + twoHyphens + end);

  76.             fStream.close();
  77.             ds.flush();
  78.             /* 取得Response内容 */
  79.             InputStream is = con.getInputStream();
  80.             int ch;
  81.             StringBuffer b = new StringBuffer();
  82.             while ((ch = is.read()) != -1) {
  83.                 b.append((char) ch);
  84.             }
  85.             /* 将Response显示于Dialog */
  86.             showDialog("上传成功" + b.toString().trim());
  87.             /* 关闭DataOutputStream */
  88.             ds.close();
  89.         } catch (Exception e) {
  90.             showDialog("上传失败" + e);
  91.         }
  92.     }

  93.     /* 显示Dialog的method */
  94.     private void showDialog(String mess) {
  95.         new AlertDialog.Builder(PhotoUpload.this).setTitle("Message")
  96.                 .setMessage(mess)
  97.                 .setNegativeButton("确定", new DialogInterface.OnClickListener() {
  98.                     public void onClick(DialogInterface dialog, int which) {
  99.                     }
  100.                 }).show();
  101.     }
  102. }
复制代码



服务器端servlet
  1. package com.demo;

  2. import java.io.File;
  3. import java.io.IOException;
  4. import java.util.Date;
  5. import java.util.Iterator;
  6. import java.util.List;

  7. import javax.servlet.ServletException;
  8. import javax.servlet.http.HttpServlet;
  9. import javax.servlet.http.HttpServletRequest;
  10. import javax.servlet.http.HttpServletResponse;

  11. import org.apache.commons.fileupload.DiskFileUpload;
  12. import org.apache.commons.fileupload.FileItem;

  13. public class UploadServlet extends HttpServlet {
  14.     public void doPost(HttpServletRequest request, HttpServletResponse response)
  15.             throws ServletException, IOException {

  16.         String temp = request.getSession().getServletContext().getRealPath("/")
  17.                 + "temp"; // 临时目录
  18.         System.out.println("temp=" + temp);
  19.         String loadpath = request.getSession().getServletContext()
  20.                 .getRealPath("/")
  21.                 + "Image"; // 上传文件存放目录
  22.         System.out.println("loadpath=" + loadpath);
  23.         DiskFileUpload fu = new DiskFileUpload(); // 需要导入commons-fileupload-1.2.2.jar
  24.                                                     // http://commons.apache.org/fileupload/
  25.         fu.setSizeMax(1 * 1024 * 1024); // 设置允许用户上传文件大小,单位:字节
  26.         fu.setSizeThreshold(4096); // 设置最多只允许在内存中存储的数据,单位:字节
  27.         fu.setRepositoryPath(temp); // 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录

  28.         // 开始读取上传信息
  29.         int index = 0;
  30.         List fileItems = null;

  31.         try {
  32.             fileItems = fu.parseRequest(request);
  33.             System.out.println("fileItems=" + fileItems);
  34.         } catch (Exception e) {
  35.             e.printStackTrace();
  36.         }

  37.         Iterator iter = fileItems.iterator(); // 依次处理每个上传的文件
  38.         while (iter.hasNext()) {
  39.             FileItem item = (FileItem) iter.next();// 忽略其他不是文件域的所有表单信息
  40.             if (!item.isFormField()) {
  41.                 String name = item.getName();// 获取上传文件名,包括路径
  42.                 name = name.substring(name.lastIndexOf("\") + 1);// 从全路径中提取文件名
  43.                 long size = item.getSize();
  44.                 if ((name == null || name.equals("")) && size == 0)
  45.                     continue;
  46.                 int point = name.indexOf(".");
  47.                 name = (new Date()).getTime()
  48.                         + name.substring(point, name.length()) + index;
  49.                 index++;
  50.                 File fNew = new File(loadpath, name);
  51.                 try {
  52.                     item.write(fNew);
  53.                 } catch (Exception e) {
  54.                     // TODO Auto-generated catch block
  55.                     e.printStackTrace();
  56.                 }

  57.             } else// 取出不是文件域的所有表单信息
  58.             {
  59.                 String fieldvalue = item.getString();
  60.                 // 如果包含中文应写为:(转为UTF-8编码)
  61.                 // String fieldvalue = new
  62.                 // String(item.getString().getBytes(),"UTF-8");
  63.             }
  64.         }
  65.         String text1 = "11";
  66.         response.sendRedirect("result.jsp?text1=" + text1);
  67.     }
  68. }
复制代码



activity_main.xml
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2.     xmlns:tools="http://schemas.android.com/tools"
  3.     android:layout_width="match_parent"
  4.     android:layout_height="match_parent" >

  5.     <EditText
  6.         android:id="@+id/myText2"
  7.         android:layout_width="wrap_content"
  8.         android:layout_height="wrap_content"
  9.         android:layout_alignParentTop="true"
  10.         android:layout_centerHorizontal="true"
  11.         android:layout_marginTop="116dp"
  12.         android:ems="10"
  13.         android:inputType="textPersonName" />

  14.     <EditText
  15.         android:id="@+id/myText3"
  16.         android:layout_width="wrap_content"
  17.         android:layout_height="wrap_content"
  18.         android:layout_alignLeft="@+id/myText2"
  19.         android:layout_below="@+id/myText2"
  20.         android:layout_marginTop="45dp"
  21.         android:ems="10" />

  22.     <Button
  23.         android:id="@+id/myButton"
  24.         android:layout_width="wrap_content"
  25.         android:layout_height="wrap_content"
  26.         android:layout_below="@+id/myText3"
  27.         android:layout_centerHorizontal="true"
  28.         android:layout_marginTop="61dp"
  29.         android:text="上传" />

  30. </RelativeLayout>
复制代码





上一篇:CM13编译参考教程,教你如何快速编译自己的ROM
下一篇:[2017-8-13]国产手机报价
回复

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /1 下一条

抖音账号
关注抖音
查看在线教程,私信咨询


手机版|小黑屋|网站地图|宅科技 ( 粤ICP备15107403号

GMT+8, 2024-11-23 16:28 , Processed in 0.168666 second(s), 25 queries .

Copyright © 2016 宅科技 | 智能终端极客社区

Powered by Discuz! X3.4 Licensed

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