不用框架,怎么在上传文件的同时传普通参数enctype=multipart/form-data

水墨成章 2017-11-29 05:00:48
<form method="post" action="/TomcatTest/UploadServlet" enctype="multipart/form-data">
选择一个文件:
<input type="file" name="uploadFile" />
<input type="text" name="tests" id="tests" value="yes" />
<input type="submit" value="上传" />
</form>
怎么把文件传过去的同时,servlet也能取到value="yes",request.get..没用了
...全文
1181 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
水墨成章 2017-12-07
  • 打赏
  • 举报
回复
引用 26 楼 enl_green 的回复:
[quote=引用 25 楼 lzqzszh 的回复:] 这个是我的代码。我是通过解析文件名来获取我想要的数据的,你的我感觉好复杂啊,看不懂,你能看一下我这个,然后在我这个基础上修改来获取普通域参数吗?
给我你的邮箱,我给你发点资料[/quote] 非常感谢enl_green给我解答,你给我发的资料详解了我的疑问,如果有朋友有和我一样的问题没有得到解决,可以发邮件给我。
Rolf已存在 2017-12-06
  • 打赏
  • 举报
回复
引用 25 楼 lzqzszh 的回复:
这个是我的代码。我是通过解析文件名来获取我想要的数据的,你的我感觉好复杂啊,看不懂,你能看一下我这个,然后在我这个基础上修改来获取普通域参数吗?
给我你的邮箱,我给你发点资料
水墨成章 2017-12-06
  • 打赏
  • 举报
回复
这个是我的代码。我是通过解析文件名来获取我想要的数据的,你的我感觉好复杂啊,看不懂,你能看一下我这个,然后在我这个基础上修改来获取普通域参数吗?
水墨成章 2017-12-06
  • 打赏
  • 举报
回复
package com.NJMT.servlet; import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; 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; import com.NJMT.db.Db; /** * Servlet implementation class UploadServlet */ @WebServlet("/UploadServlet") public class InsertImg extends HttpServlet { private static final long serialVersionUID = 1L; // 上传文件存储目录 private static final String UPLOAD_DIRECTORY = "upload"; // 上传配置 private static final int MEMORY_THRESHOLD = 1024 * 1024 * 3; // 3MB private static final int MAX_FILE_SIZE = 1024 * 1024 * 40; // 40MB private static final int MAX_REQUEST_SIZE = 1024 * 1024 * 50; // 50MB /** * 上传数据及保存文件 */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 检测是否为多媒体上传 String tset=request.getParameter("orderform"); System.out.println(tset); if (!ServletFileUpload.isMultipartContent(request)) { // 如果不是则停止 PrintWriter writer = response.getWriter(); writer.println("Error: 表单必须包含 enctype=multipart/form-data"); writer.flush(); return; } // 配置上传参数 DiskFileItemFactory factory = new DiskFileItemFactory(); // 设置内存临界值 - 超过后将产生临时文件并存储于临时目录中 factory.setSizeThreshold(MEMORY_THRESHOLD); // 设置临时存储目录 factory.setRepository(new File(System.getProperty("java.io.tmpdir"))); ServletFileUpload upload = new ServletFileUpload(factory); // 设置最大文件上传值 upload.setFileSizeMax(MAX_FILE_SIZE); // 设置最大请求值 (包含文件和表单数据) upload.setSizeMax(MAX_REQUEST_SIZE); // 中文处理 upload.setHeaderEncoding("UTF-8"); // 构造临时路径来存储上传的文件 // 这个路径相对当前应用的目录 String uploadPath = request.getServletContext().getRealPath("./") + File.separator + UPLOAD_DIRECTORY; // 如果目录不存在则创建 File uploadDir = new File(uploadPath); if (!uploadDir.exists()) { uploadDir.mkdir(); } try { // 解析请求的内容提取文件数据 @SuppressWarnings("unchecked") List<FileItem> formItems = upload.parseRequest(request); if (formItems != null && formItems.size() > 0) { // 迭代表单数据 for (FileItem item : formItems) { // 处理不在表单中的字段 if (!item.isFormField()) { String fileName = new File(item.getName()).getName(); String ordernum=""; for (int i = 0; i < fileName.length(); i++) { if(fileName.charAt(i)>=48&&fileName.charAt(i)<=57){ ordernum=ordernum+fileName.charAt(i);} } String sql="update orderform set bill = 'O',imgname = '"+fileName+"' where ordernum = '"+ordernum+"';"; new Db().executeUpdate(sql); String filePath = uploadPath + File.separator + fileName; File storeFile = new File(filePath); // 在控制台输出文件的上传路径 System.out.println(filePath); // 保存文件到硬盘 item.write(storeFile); request.setAttribute("message", "订单编号:"+ordernum+"的图片上传成功!"); } } } } catch (Exception ex) { request.setAttribute("message", "错误信息: " + ex.getMessage()); } // 跳转到 message.jsp request.getServletContext().getRequestDispatcher("/order/message.jsp").forward( request, response); //response.sendRedirect("select?op=showcOrderform"); } }
水墨成章 2017-12-06
  • 打赏
  • 举报
回复
引用 22 楼 enl_green 的回复:
上面代码中有一行没写上..... if(item.){ 应该是 if(item.isFormField()){ ......
非常感谢,我好好研究一下你的代码
水墨成章 2017-12-06
  • 打赏
  • 举报
回复
引用 26 楼 enl_green 的回复:
[quote=引用 25 楼 lzqzszh 的回复:] 这个是我的代码。我是通过解析文件名来获取我想要的数据的,你的我感觉好复杂啊,看不懂,你能看一下我这个,然后在我这个基础上修改来获取普通域参数吗?
给我你的邮箱,我给你发点资料[/quote] fyyok@outlook.com
Rolf已存在 2017-12-05
  • 打赏
  • 举报
回复
如果是普通表单域,直接调用getString(utf-8)可以获取对应的域值,上传域直接getInputstream或调用common io的方法就可以了
Rolf已存在 2017-12-05
  • 打赏
  • 举报
回复
fileupload是用fileitem接受客户端各种域,fileitem的方法isFormField()可以判断是上传域还是普通表单域
水墨成章 2017-12-05
  • 打赏
  • 举报
回复
sssssssss
水墨成章 2017-12-05
  • 打赏
  • 举报
回复
用这个fileupload怎么获取普通参数呢
水墨成章 2017-12-05
  • 打赏
  • 举报
回复
引用 10 楼 enl_green 的回复:
上面都回复的啥啊?
这个用request.getInputStream就行了,然后读取出数据,数据是完整的http的上传协议规定的数据内容,普通表单域和上传域的数据都包括了,只是需要自己解析,比如bundary什么的,逻辑太过复杂,因此最好使用第三方api实现,比如fileupload,cos等,解析起来就很方便了

我上传图片用的api,
Rolf已存在 2017-12-05
  • 打赏
  • 举报
回复
上面代码中有一行没写上..... if(item.){ 应该是 if(item.isFormField()){ ......
Rolf已存在 2017-12-05
  • 打赏
  • 举报
回复
总之来说,不在struts2环境下使用fileupload还是很别扭的,处理逻辑比较晕,如果不用struts2,可以用cos,很好用,直接request.get什么域的值都出来了,不用遍历
Rolf已存在 2017-12-05
  • 打赏
  • 举报
回复
引用 19 楼 lzqzszh 的回复:
[quote=引用 15 楼 enl_green 的回复:] 如果是普通表单域,直接调用getString(utf-8)可以获取对应的域值,上传域直接getInputstream或调用common io的方法就可以了
那我怎么调用这个getString()方法呀,我不会呀[/quote] servlet: protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setSizeThreshold(1024 * 10); File f = new File("d:\\a"); factory.setRepository(f); ServletFileUpload sfu = new ServletFileUpload(factory); List<Map<String, Object>> l=new ArrayList<Map<String, Object>>(); try { List<FileItem> list = sfu.parseRequest(request); Map<String, Object> map=null; for (int i = 0; i < list.size(); i++) { FileItem item=list.get(i); if(item.){ String desc=item.getString("utf-8"); map.put("desc", desc); continue; } if(item.getSize()==0){ continue; } map=new HashMap<String, Object>(); InputStream is = item.getInputStream(); String name = item.getName(); String suffix=name.substring(name.indexOf(".")); name=UUID.randomUUID().toString().replace("-", "")+suffix; // name=name.substring(name.lastIndexOf("\\")); System.out.println("name:" + name); String path = getServletContext().getRealPath("/upload"); File ff = new File(path + "/" + name); FileUtils.copyInputStreamToFile(item.getInputStream(), ff); map.put("name", ff.getPath()); map.put("type", item.getContentType()); map.put("size", item.getSize()); l.add(map); } request.setAttribute("list", l); request.getRequestDispatcher("disp.jsp").forward(request, response); // OutputStream os=new FileOutputStream(path+"/"+name); // int len=0; // byte[] b=new byte[1024]; // while((len=is.read(b))!=-1){ // os.write(b, 0, len); // } // os.close(); } catch (FileUploadException e) { // TODO Auto-generated catch block e.printStackTrace(); } } jsp: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <form action="one" method="post" enctype="multipart/form-data"> file1:<input type="file" name="file1"/><br/> desc:<input type="text" name="desc1"/><br/> file2:<input type="file" name="file2"/><br/> desc:<input type="text" name="desc1"/><br/> file3:<input type="file" name="file3"/><br/> desc:<input type="text" name="desc1"/><br/> <input type="submit"/> </form> </body> </html>
水墨成章 2017-12-05
  • 打赏
  • 举报
回复
引用 15 楼 enl_green 的回复:
如果是普通表单域,直接调用getString(utf-8)可以获取对应的域值,上传域直接getInputstream或调用common io的方法就可以了
那我怎么调用这个getString()方法呀,我不会呀
mirrorspace 2017-12-05
  • 打赏
  • 举报
回复
见笑了.
引用 17 楼 enl_green 的回复:
[quote=引用 16 楼 mirror030 的回复:] 怎么会混在一起呢.都可以分开取的啊 GET参数 Request.QueryString FORM参数 Request.Form 文件 Request.Files
人家问的的是servlet好不??[/quote]
Rolf已存在 2017-12-05
  • 打赏
  • 举报
回复
引用 16 楼 mirror030 的回复:
怎么会混在一起呢.都可以分开取的啊 GET参数 Request.QueryString FORM参数 Request.Form 文件 Request.Files
人家问的的是servlet好不??
mirrorspace 2017-12-05
  • 打赏
  • 举报
回复
怎么会混在一起呢.都可以分开取的啊 GET参数 Request.QueryString FORM参数 Request.Form 文件 Request.Files
Rolf已存在 2017-12-04
  • 打赏
  • 举报
回复
上面都回复的啥啊? 这个用request.getInputStream就行了,然后读取出数据,数据是完整的http的上传协议规定的数据内容,普通表单域和上传域的数据都包括了,只是需要自己解析,比如bundary什么的,逻辑太过复杂,因此最好使用第三方api实现,比如fileupload,cos等,解析起来就很方便了
水墨成章 2017-12-04
  • 打赏
  • 举报
回复
引用 8 楼 jslang 的回复:
[quote=引用 7 楼 lzqzszh 的回复:] [quote=引用 2 楼 mirror030 的回复:] 这本来可以啊.后台应该 能收到文件和参数
后台是能收到呀,但是是和图片混在一起,req.getP不好取了[/quote] https://www.cnblogs.com/yanghongfei/p/6972735.html[/quote] 你给我发的这个我上个星期就看过了,和我的不是一个问题呀。
加载更多回复(8)

39,087

社区成员

发帖
与我相关
我的任务
社区描述
HTML5是构建Web内容的一种语言描述方式。HTML5是互联网的下一代标准,是构建以及呈现互联网内容的一种语言方式.被认为是互联网的核心技术之一。
社区管理员
  • HTML5社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧