激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲成人伊人 | 成人福利视频在线观看 | 国产精品一区二区三区在线 | 精品在线视频观看 | 国产精品夜色视频一级区 | 黄色网页在线看 | 久久人人97超碰国产公开结果 | 亚洲精品一区二区三区免 | 九九热在线精品视频 | 欧美性受xxxx白人性爽 | 成人免费观看在线视频 | 日本在线免费观看视频 | 久久精品国产99久久久古代 | 成人综合在线观看 | 日韩中文字幕一区二区三区 | 日本一级特级 | 欧美人与牲禽动交精品一区 | 成人情欲视频在线看免费 | 国产美女视频一区二区三区 | av在线收看 | 久色亚洲| 男女无遮挡羞羞视频 | chinese xvideos gay| 久久精品亚洲国产奇米99 | 澳门一级淫片免费视频 | 国产资源在线免费观看 | 久久最新免费视频 | 在线视频 日韩 | 日韩色视频在线观看 | 亚洲视频在线一区二区 | 免费观看国产精品视频 | 爱草在线| 少妇的肉体2无删减版 | 中文字幕在线观看日韩 | 欧美a在线播放 | 国产一区二区三区在线视频 | 国产在线一级片 | 99国产精品白浆在线观看免费 | www.99热精品 | 最新精品在线 | 日韩字幕 |