form表单+servlet实现文件(附件)上传

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_36146275/article/details/69091054

在客户需要求中,文件上传的功能几乎是必须,本篇博主讲讲如何实现文件的上传,上传后文件会被保存到哪里等相关具体实现。


项目结构如下:需要导入两个jar包,是apache提供的文件上传工具类

jar包下载地址:【http://pan.baidu.com/s/1slbIstn】

bootstrap下载地址:【http://pan.baidu.com/s/1boG6nLX】


创建index.jsp:

用form表单提交文件,form表单必须设置enctype="multipart/form-data"、method="post"

action="",指定一个servlet处理表单。

style样式是一个椭圆的边框。

扫描二维码关注公众号,回复: 3483363 查看本文章
<%@ 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 lang="zh-CN">
<head>
    <title>文件上传</title>
    <link href="bootstrap/css/bootstrap.min.css" rel="stylesheet">
    <script src="bootstrap/js/jquery.min.js"></script>
    <style>
    	.circular{
    		margin:20px;
		    padding:10px; width:300px; height:auto;
		    border: 2px solid #000000;
		    -moz-border-radius: 15px; 
		    -webkit-border-radius: 15px; 
		    border-radius:15px;           
		}
    </style>
</head>
<body>
<div class="circular">
     <form enctype="multipart/form-data" action="uploadServlet" method="post">
         <div class="form-group">
             <label>File input</label>
             <input type="file" id="filename" name="filename"/>
         </div>
         <button type="submit" class="btn btn-default btn-primary">按钮</button>
     </form>
</div>
</body>
</html>


UploadServlet.java:

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.UUID;
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 org.apache.commons.io.FilenameUtils;

/**
 * Servlet implementation class uploadServlet
 */
@WebServlet("/uploadServlet")
public class UploadServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public UploadServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * 功能:使用apache提供的上传组件实现文件上传
	 * 
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("***处理上传请求***");
		DiskFileItemFactory factory = new DiskFileItemFactory();
		factory.setRepository(new File("e:/"));//临时文件存储路径
		ServletFileUpload fileUpload = new ServletFileUpload(factory);//核心操作对象
		fileUpload.setHeaderEncoding("utf-8");//防乱码
		try {
			List<FileItem> list = fileUpload.parseRequest(request);//解析器解析request请求
			for (FileItem fileItem : list) {//多文件上传处理
				InputStream in = fileItem.getInputStream();
				String filename = fileItem.getName();//得到的是全路径文件名,需要处理
				if (filename!=null) {
					filename =UUID.randomUUID()+"_"+FilenameUtils.getName(filename);//filename = 时间戳_文件名.类型,解决文件重名被覆盖问题
					System.out.println(filename);
					int len = 0;
					byte[] array = new byte[1024];
					FileOutputStream fos = new FileOutputStream("f:/"+filename);
					while((len = in.read(array))!=-1){//表示每次最多读1024个字节
						fos.write(array,0,len);
						fos.flush();
					}
					fos.close();
					in.close();
					fileItem.delete();
					response.setCharacterEncoding("UTF-8");
					response.getWriter().append("上传成功");
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}			
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}

可以看到F盘下已经有了上传的文件。


猜你喜欢

转载自blog.csdn.net/weixin_36146275/article/details/69091054
今日推荐