2021-01-30

这篇博客介绍了如何利用Servlet和Apache的commons-fileupload库实现图片上传功能。通过表单设置enctype属性,接收文件上传并将其保存到服务器的images文件夹下,同时提供了一种处理普通表单数据的方法。文章还提到了文件命名的随机化策略以避免重复,并给出了完整的代码示例。

关于上传图片到webContent里面的文件夹images

这篇文章也是看了诸多大神的代码所写的,主要代码还是一位大神的,至于名字我忘记了,以下是代码

  1. 首先先要导入俩个包commons-fileupload-1.3.1.jar和commons-io-2.4.jar这两个包,搜一下的话还是有人发下载链接的
  2. 其次关于这篇文章我也不是懂的很多,只能说我也是刚学会一点,也不敢称大神
  3. 代码最后还是能出图片的
  4. form表单要设置enctype="multipart/form-data"这个属性,设置这个属性后,你的servlet代码就不能通过request.getParameter(name)来获取值了,不过方向,代码中包含了解决方法。
      //收集数据的容器
		Map<String,Object> map = new HashMap<String, Object>();
		//创建磁盘工厂
		DiskFileItemFactory factory = new DiskFileItemFactory();
		//创建文件上传核心对象
		ServletFileUpload upload = new ServletFileUpload(factory);
		//解析request集合
		List<FileItem> parseRequest = null;
		try {
			parseRequest = upload.parseRequest(request);
		} catch (FileUploadException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//遍历request集合
		for (FileItem fileItem : parseRequest) {
			//判断是普表单项还是文件表单项
			boolean formField = fileItem.isFormField();
			if(formField){//是普通表单项
				String fieldName = fileItem.getFieldName();//获取表单项名字,也就是平时getParameter的那个name
				String stringValues = fileItem.getString("utf-8");//获取表单项的值,平时getParameter的那个name返回的值当然要编码
				map.put(fieldName, stringValues);//设置到map,取出一个name你就得将这个值添加到上面定义的map中,用于后面进行封装
			}else{//是文件上传的表单项
				//获取上传的文件名字
				String name = fileItem.getName().substring(fileItem.getName().lastIndexOf("."));
				//随机一个唯一的名字给图片重新命名,以免重复
				String imgName = UUID.randomUUID() + name;
				//设置保存路径,也就是你根路径底下的一个文件夹中
				String realPath = getServletContext().getRealPath("images/customer");
				//获取输入流读取文件
				InputStream inputStream = fileItem.getInputStream();
				//创建输出流写入文件,路径/图片名字
				OutputStream outputStream = new FileOutputStream(realPath+"/"+imgName);
				//将文件写入到images中
				IOUtils.copy(inputStream, outputStream);
				//关流
				inputStream.close();
				outputStream.close();
				fileItem.delete();
				//根据对象保存路径~(相对路径),一般数据库中的图片字段都是相对路径.总之添加数据时根据你数据库图片字段的格式添加,这里                       的路径可以自己更改
				map.put("productImg", "http://localhost:8080/kankanjavaweb/images/customer/"+imgName);
				
			}
		}
  • 代码就到这里就可以完成图片上传,另外强调,关于表格其他的数据,可以通过map.get(“name”)来获取,这里的name就是表单中<input … name="">这里面的值,自己起的,然后就可以调用自己封装的增删改查的方法了
1个上传组件commons-fileupload =============commons-fileupload ================ common-fileupload组件是apache的一个开源项目之一,可以从http://jakarta.apache.org/commons/fileupload/下载。该组件简单易用,可实现一次上传一个或多个文件,并可限制文件大小。 -下载后解压zip包,将commons-fileupload-1.1.1.jar,和commons-io-1.2.jar(这里我们用的是更新的版本,但是用法是一样的)复制到tomcat的webapps\你的webapp\WEB-INF\lib\下,如果目录不存在请自建目录。 新建一个servlet: FileUpload.java用于文件上传: package com.drp.util.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.*; import java.util.*; import java.util.regex.*; import java.io.*; import org.apache.commons.fileupload.servlet.*; import org.apache.commons.fileupload.disk.DiskFileItemFactory; public class FileUpload extends HttpServlet { private String uploadPath = ""; // 用于存放上传文件的目录 private File tempPath = new File("D:\\Tomcat 5.5\\webapps\\drp1.2\\tempimages\\"); // 用于存放临时文件的目录 public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/html; charset=GB18030"); PrintWriter out = res.getWriter(); System.out.println(req.getContentLength()); System.out.println(req.getContentType()); DiskFileItemFactory factory = new DiskFileItemFactory(); // maximum size that will be stored in memory //允许设置内存中存储数据的门限,单位:字节 factory.setSizeThreshold(4096); // the location for saving data that is larger than getSizeThreshold() //如果文件大小大于SizeThreshold,则保存到临时目录 factory.setRepository(new File("D:\\Tomcat 5.5\\webapps\\drp1.2\\tempimages")); ServletFileUpload upload = new ServletFileUpload(factory); // maximum size before a FileUploadException will be thrown //最大上传文件,单位:字节 upload.setSizeMax(1000000); try { List fileItems = upload.parseRequest(req); // assume we know there are two files. The first file is a small //
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值