javaWeb文件上传

本文介绍如何在Java Web应用中实现文件上传功能,包括设置表单、使用Servlet接收文件及利用Apache Commons FileUpload组件解析请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上传文件:

1. 上传对表单限制
  * method="post"
  * enctype="multipart/form-data"
  * 表单中需要添加文件表单项:<input type="file" name="xxx" />


<form action="xxx" method="post" enctype="multipart/form-data">
  用户名;<input type="text" name="username"/><br/>
  文    件:<input type="file" name="filename"/><br/>
  <input type="submit" value="上传"/>
</form>

2. 上传对Servlet限制
  * request.getParametere("xxx");这个方法在表单为enctype="multipart/form-data"时,它作废了。它永远都返回null
  * ServletInputStream request.getInputStream();包含整个请求的体!

upload.jsp页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!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="Upload3Servlet" enctype="multipart/form-data" method="post">
		用户名:<input type="text" name="username" ><br/>
		文    件:<input type="file" name="filename" ><br/>
		<input type="submit" value="上传" ><br/>
	</form>
</body>
</html>

UploadServlet代码:

import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.UUID;

import javax.servlet.ServletContext;
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.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class UploadServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		/**
		 * 1.创建工厂
		 * 2.创建解析器
		 * 3.解析request请求
		 * 获取  FileItem
		 */
		DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
		ServletFileUpload sf = new ServletFileUpload(diskFileItemFactory);
		sf.setHeaderEncoding("utf-8"); // 设置请求编码
		try {
			List<FileItem> list = sf.parseRequest(request);
			
			FileItem fileItem = list.get(1);
			System.out.println("name="+fileItem.getFieldName());
			// 文件路径
			String filename = fileItem.getName();
			System.out.println("url="+filename);
			
			// 获取文件名称
			if(filename.lastIndexOf("\\")!=-1){ // 文件路径可能包含F:\AA\BB\美女.jpg
				filename=filename.substring(filename.lastIndexOf("\\")+1);
			}
			// 获取根目录 
			ServletContext application = this.getServletContext();
			String path = application.getRealPath("/WEB-INF/files");
		
			// 设置不重名的文件名
			String uuid  = UUID.randomUUID().toString().replace("-", "");
			String savename=uuid+"_"+filename;
			
			// 分层设置目录
			String hs = Integer.toHexString(filename.hashCode());
			File saveurl= new File(path, hs.charAt(0)+"/"+hs.charAt(1));
			//创建多个文件夹  如果有就不创建 如果没有就创建 
			saveurl.mkdirs();
			System.out.println("保存路径"+saveurl.toString());
			
			// 设置保存地址
			File file = new File(saveurl,savename);
			// 写入保存地址  
			fileItem.write(file);
			
		} catch (FileUploadException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

chain_fei

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

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

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

打赏作者

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

抵扣说明:

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

余额充值