使用common-fileupload 和common-io包来实现文件上传

       之前有实现过使用struts2实现文件上传的功能,直接使用框架来实现文件上传的确很方便。但是容易让人忽略其中的细节,今天先将最近使用common-fileupload 和 common-io 包来实现文件上传的方法记录下来,以供参考。
        1. 首先导入jar包,common-fileupload 和 common-io
        2. 编码实现(如何在web.xml中配置action这里省略):
public class Upload extends HttpServlet {
	private static final long serialVersionUID = 1L;
	@Override
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		DiskFileItemFactory dfi = new DiskFileItemFactory();
		String path = "F:" + File.separator + "upload"; 	// 获得上传文件的存储路径
		File file=new File(path);
		if(!file.exists()){
			file.mkdirs();
		}
		
		String fileName="";
		
		dfi.setSizeThreshold(1024 * 1024); 					// 设置文件大小超过1024*1024就写到disk上
		dfi.setRepository(file); 							// 设置存储的仓库
		ServletFileUpload sfu = new ServletFileUpload(dfi); // 实例化一个servletFileUpload对象
		sfu.setHeaderEncoding("utf-8");                     // 解决上传文件乱码问题
		try {
			List<FileItem> list = sfu.parseRequest(request);
			HttpSession session = request.getSession();  	// 取得session
			for (FileItem item : list) {               		// 遍历得到每个FileItem
				String name = item.getFieldName();    		// 取得表单文本框的名字
				if (item.isFormField()) {             		// 如果上传的这个文件只是一个表单字段,而不是一个文件
					String value = item.getString();  		// 取得文本框输入的内容
					session.setAttribute(name, value);		// 存储数据
				}else {
					// 如果上传的是一个文件
					// 取得上传文件的名字,即上传框中的内容名字
					String value = item.getName();
					// 因为在opera浏览器中文件上传item.geName()会得到具体路径而不止是名字,所以需要从路径中取出名字
					// 取得文件路径名字开始的位置
					int start = value.lastIndexOf("\\");
					// 得到文件名
					fileName = value.substring(start + 1);
					// 读取文件的内容
					item.write(new File(path, fileName));
					// 存储数据
					session.setAttribute(name, fileName);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小胖墩有点瘦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值