在java里实现页面中的上传与下载

一、文件上传

1.jsp页面中通过form表单上传文件

	<form action="upload.do" method="post" enctype="multipart/form-data">
    		<input type="file" name="ff">
    		<input type="submit" value="上传">
    </form>
//form表单enctype属性一定要改成multipart/form-data,这样才知道submit的是文件

2.创建UploadServlet

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setCharacterEncoding("utf-8");
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html");
		//获得磁盘文件条目工厂
		DiskFileItemFactory factory=new DiskFileItemFactory();
		//通过调用jar包api,进行文件上传处理
		ServletFileUpload upload=new ServletFileUpload(factory);
		//单个文件最大10M
		upload.setFileSizeMax(1024*1024*10);
		//整个request请求的大小,一般比单个文件大小要大,因为包含request的其他请求信息
		upload.setSizeMax(1024*1024*11);
		try {
			//解析request请求
			List<FileItem> items=upload.parseRequest(request);
			for(FileItem item:items){
				//如果不是表单域,则为文件域,开始进行处理
				if(!item.isFormField()){
					//获取上传文件的名称
					String fileName=item.getName();
					//根据上传文件的名称,创建对应的文件
					String path=request.getRealPath("/upload");
					File f=new File(path+"/"+UUID.randomUUID()+"-"+fileName);
					//写文件,实现上传功能
					item.write(f);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		request.getRequestDispatcher("success.jsp").forward(request, response);
		
	}
//要在WebRoot下建立upload文件夹,并在lib下导入两个包
上传成功后,可以在tomcat下你项目里的upload文件夹中找到上传的文件

二、下载文件

1.jsp页面中通过a链接下载

<a href="down.do?filename=测试.docx">测试.docx</a>

2.建立DownloadServlet

public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("utf-8");
		response.setContentType("application/x-msdownload;");
		String fileName=request.getParameter("filename");
		System.out.println("下载的文件为:"+new String(fileName.getBytes("iso8859-1"),"UTF-8"));
		String filePath=request.getRealPath("/upload");
		//浏览器下载时默认保存的文件名称
		response.setHeader("Content-disposition", "attachment; filename=\"" + fileName+"\"");
		InputStream is=new FileInputStream(new File(filePath+"/"+new String(fileName.getBytes("iso8859-1"),"UTF-8")));
		//得到浏览器响应的输出流
		OutputStream os=response.getOutputStream();
		byte data[]=new byte[1024*1024*10];
		int length=0;
		while(is.available()>0){
			length=is.read(data);
		}
		os.write(data,0,length);
		os.flush();
	}
//因为a链接默认使用get方法,所以传过来的fileName要重新编码成utf-8,否则会出现乱码








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Margin_he

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

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

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

打赏作者

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

抵扣说明:

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

余额充值