一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|正則表達式|

服務器之家 - 編程語言 - JAVA教程 - Java實現表單提交(支持多文件同時上傳)

Java實現表單提交(支持多文件同時上傳)

2020-07-25 15:43java攻城師 JAVA教程

本文介紹了Java、Android實現表單提交(支持多文件同時上傳)的方法,具有一定的參考價值,下面跟著小編一起來看下吧

在Android里面或者J2EE后臺需要趴別人網站數據,模擬表單提交是一件很常見的事情,但是在Android里面要實現多文件上傳,還要夾著普通表單字段上傳,這下可能就有點費勁了,今天花時間整理了一個工具類,主要是借助于HttpClient,其實也很簡單,看一下代碼就非常清楚了

HttpClient工具類:

HttpClientUtil.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
package cn.com.ajava.util;
import java.io.File;
import java.io.Serializable;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.http.Consts;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
 
/**
 * HttpClient工具類
 *
 * @author 曾繁添
 * @version 1.0
 */
public class HttpClientUtil
{
 public final static String Method_POST = "POST";
 public final static String Method_GET = "GET";
 /**
 * multipart/form-data類型的表單提交
 *
 * @param form
 *  表單數據
 */
 public static String submitForm(MultipartForm form)
 {
 // 返回字符串
 String responseStr = "";
 // 創建HttpClient實例
 HttpClient httpClient = new DefaultHttpClient();
 try
 {
  // 實例化提交請求
  HttpPost httpPost = new HttpPost(form.getAction());
  // 創建MultipartEntityBuilder
  MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create();
  // 追加普通表單字段
  Map<String, String> normalFieldMap = form.getNormalField();
  for (Iterator<Entry<String, String>> iterator = normalFieldMap.entrySet().iterator(); iterator.hasNext();)
  {
  Entry<String, String> entity = iterator.next();
  entityBuilder.addPart(entity.getKey(), new StringBody(entity.getValue(), ContentType.create("text/plain", Consts.UTF_8)));
  }
  // 追加文件字段
  Map<String, File> fileFieldMap = form.getFileField();
  for (Iterator<Entry<String, File>> iterator = fileFieldMap.entrySet().iterator(); iterator.hasNext();)
  {
  Entry<String, File> entity = iterator.next();
  entityBuilder.addPart(entity.getKey(), new FileBody(entity.getValue()));
  }
  // 設置請求實體
  httpPost.setEntity(entityBuilder.build());
  // 發送請求
  HttpResponse response = httpClient.execute(httpPost);
  int statusCode = response.getStatusLine().getStatusCode();
  // 取得響應數據
  HttpEntity resEntity = response.getEntity();
  if (200 == statusCode)
  {
  if (resEntity != null)
  {
   responseStr = EntityUtils.toString(resEntity);
  }
  }
 } catch (Exception e)
 {
  System.out.println("提交表單失敗,原因:" + e.getMessage());
 } finally
 {
  httpClient.getConnectionManager().shutdown();
 }
 return responseStr;
 }
 /** 表單字段Bean */
 public class MultipartForm implements Serializable
 {
 /** 序列號 */
 private static final long serialVersionUID = -2138044819190537198L;
 /** 提交URL **/
 private String action = "";
 /** 提交方式:POST/GET **/
 private String method = "POST";
 /** 普通表單字段 **/
 private Map<String, String> normalField = new LinkedHashMap<String, String>();
 /** 文件字段 **/
 private Map<String, File> fileField = new LinkedHashMap<String, File>();
 public String getAction()
 {
  return action;
 }
 public void setAction(String action)
 {
  this.action = action;
 }
 public String getMethod()
 {
  return method;
 }
 public void setMethod(String method)
 {
  this.method = method;
 }
 public Map<String, String> getNormalField()
 {
  return normalField;
 }
 public void setNormalField(Map<String, String> normalField)
 {
  this.normalField = normalField;
 }
 public Map<String, File> getFileField()
 {
  return fileField;
 }
 public void setFileField(Map<String, File> fileField)
 {
  this.fileField = fileField;
 }
 public void addFileField(String key, File value)
 {
  fileField.put(key, value);
 }
 public void addNormalField(String key, String value)
 {
  normalField.put(key, value);
 }
 }
}

服務器端實現文件上傳、并且讀取參數方法:(借助于Apache的fileupload組件實現,實現了獲取表單action后面直接拼接參數、表單普通項目、文件項目三種字段獲取方法)

后臺我就直接寫了一個Servlet,具體代碼如下:

ServletUploadFile.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package cn.com.ajava.servlet;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
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.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
/**
 * 文件上傳Servlet
 * @author 曾繁添
 */
public class ServletUploadFile extends HttpServlet
{
 private static final long serialVersionUID = 1L;
 // 限制文件的上傳大小 1G
 private int maxPostSize = 1000 * 1024 * 10;
 public ServletUploadFile()
 {
 super();
 }
 @Override
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,
 IOException
 {
 doPost(request, response);
 }
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,
 IOException
 {
 PrintWriter out = response.getWriter();
 String contextPath = request.getSession().getServletContext().getRealPath("/");
 String webDir = "uploadfile" + File.separator + "images" + File.separator;
 String systemPath = request.getContextPath();
 String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()+ systemPath + "/";
 request.setCharacterEncoding("UTF-8");
 response.setContentType("text/html;charset=UTF-8");
 try
 {
 DiskFileItemFactory factory = new DiskFileItemFactory();
 factory.setSizeThreshold(1024 * 4); // 設置寫入大小
 ServletFileUpload upload = new ServletFileUpload(factory);
 upload.setSizeMax(maxPostSize); // 設置文件上傳最大大小
 System.out.println(request.getContentType());
 //獲取action后面拼接的參數(如:http://www.baidu.com?q=android)
 Enumeration enumList = request.getParameterNames();
 while(enumList.hasMoreElements()){
 String key = (String)enumList.nextElement();
 String value = request.getParameter(key);
 System.out.println(key+"="+value);
 }
 //獲取提交表單項目
 List listItems = upload.parseRequest(request);
 Iterator iterator = listItems.iterator();
 while (iterator.hasNext())
 {
 FileItem item = (FileItem) iterator.next();
 //非普通表單項目
 if (!item.isFormField())
 {
  //獲取擴展名
  String ext = item.getName().substring(item.getName().lastIndexOf("."), item.getName().length());
  String fileName = System.currentTimeMillis() + ext;
  File dirFile = new File(contextPath + webDir + fileName);
  if (!dirFile.exists())
  {
  dirFile.getParentFile().mkdirs();
  }
  item.write(dirFile);
  System.out.println("fileName:" + item.getName() + "=====" + item.getFieldName() + " size: "+ item.getSize());
  System.out.println("文件已保存到: " + contextPath + webDir + fileName);
  //響應客戶端請求
  out.print(basePath + webDir.replace("\\", "/") + fileName);
  out.flush();
 }else{
  //普通表單項目
  System.out.println("表單普通項目:"+item.getFieldName()+"=" + item.getString("UTF-8"));// 顯示表單內容。item.getString("UTF-8")可以保證中文內容不亂碼
 }
 }
 } catch (Exception e)
 {
 e.printStackTrace();
 } finally
 {
 out.close();
 }
 }
}

工具類、服務器端代碼上面都貼出來了,具體怎么調用應該就不需要說了吧?封裝的已經夠清晰明了了

調用示例DEMO:

?
1
2
3
4
5
6
7
8
9
10
11
//創建HttpClientUtil實例
HttpClientUtil httpClient = new HttpClientUtil();
MultipartForm form = httpClient.new MultipartForm();
//設置form屬性、參數
form.setAction("http://192.168.1.7:8080/UploadFileDemo/cn/com/ajava/servlet/ServletUploadFile");
File photoFile = new File(sddCardPath+"//data//me.jpg");
form.addFileField("photo", photoFile);
form.addNormalField("name", "曾繁添");
form.addNormalField("tel", "15122946685");
//提交表單
HttpClientUtil.submitForm(form);

最后說明一下jar問題:

要是android里面應用的話,需要注意一下額外引入httpmime-4.3.1.jar(我當時下的這個是最高版本了),至于fileUpload的jar,直接去apache官網下載吧

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持服務器之家!

原文鏈接:http://www.cnblogs.com/fly100/articles/3492525.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 男生操女生漫画 | 亚洲国产区中文在线观看 | 秀婷程仪公欲息肉婷在线观看 | 美女被吸乳老师羞羞漫画 | 福利一区在线观看 | 美琪美腿白丝交小说 | 欧美做受 | 白鹿扒开内裤露出尿孔 | 精品久久洲久久久久护士免费 | 青柠影视在线播放观看高清 | 亚洲成av人影院 | 湿好紧太硬了我太爽了 | 日本又大又硬又粗的视频 | 国产区香蕉精品系列在线观看不卡 | 亚洲国产成人在人网站天堂 | 亚洲阿v天堂2018在线观看 | 欧美亚洲一区二区三区 | 偷偷狠狠的日日高清完整视频 | 高清在线观看免费 | jazz中国女人护士 | 亚洲精品中文 | 久久毛片免费看一区二区三区 | 女人与zzzooooxxx | 国产90后美女露脸在线观看 | 调教开发新婚娇妻放荡 | a色在线 | 外女思春台湾三级 | 免费亚洲视频在线观看 | 国产老村长足疗店对白 | 国产在线综合网 | 91精品国产综合久久消防器材 | 热99re国产久热在线 | 国产精品嫩草影院在线看 | 久草草在线视视频 | 久久青草费线频观看国产 | a级精品九九九大片免费看 a级动漫 | 亚洲成人91| 欧美一区二区三区免费高 | 男人叼女人的痛爽视频免费 | 日本黄大片影院一区二区 | 精品欧美男同同性videos |