javaWeb实现上传下载功能

上传

准备jar包

  • commons-fileupload-1.3.1.jar
  • commons-io-2.4.jar

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="UploadServlet"  method="post" enctype="multipart/form-data"> 
		学号:<input  type="text" name="sno" /></br>
		姓名:<input  type="text" name="sname" /></br>
		上传照片:<input  type="file" name="spicture" /></br>
		<input type="submit" value="上传" />
	</form>
</body>
</html>

UploadServlet.java

package com.servlet;

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

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.FileItemFactory;
import org.apache.commons.fileupload.FileUploadBase;
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 {

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=UTF-8");
		// 上传
		boolean isMultipart = ServletFileUpload.isMultipartContent(request);
		if (isMultipart) {
//			FileItemFactory factory= new DiskFileItemFactory();
			DiskFileItemFactory factory = new DiskFileItemFactory();
			ServletFileUpload upload = new ServletFileUpload(factory);

			// 上传文件时用到的历史文件的大小FileItemFactory
			factory.setSizeThreshold(10240);// 设置临时的缓冲文件大小为10kb
			factory.setRepository(new File("D:\\uploadFileTemp"));// 设置零食文件的目录

			// 控制上传文件大小 1kb=1024b ServletFileUpload
			upload.setSizeMax(20480);// 字节 b
			try {
				Thread.sleep(3000);
			} catch (InterruptedException e1) {
				e1.printStackTrace();
			}

			// 通过parseRequest解析form中的所有请求字段,并保存在items集合中
			try {
				List<FileItem> items = upload.parseRequest(request);
				Iterator<FileItem> iter = items.iterator();
				while (iter.hasNext()) {
					FileItem item = iter.next();
					String itemName = item.getFieldName();
					int sno = -1;
					String sname = null;
					// 判断前台字段是普通form表单字段还是文件字段
					if (item.isFormField()) {
						if (itemName.equals("sno")) {
							sno = Integer.parseInt(item.getString("utf-8"));
						} else if (itemName.equals("sname")) {
							sname = item.getString("utf-8");
						}
					} else {// spicture
							// 文件上传 getFieldnName 是获取普通表单字段的Name的值
							// getName()是获取文件名
						String fileName = item.getName();// .txt .png .jpg等等格式
						String ext = fileName.substring(fileName.indexOf(".") + 1);
						// 对上传文件的类型进行限制处理
						if (!(ext.equals("png") || ext.equals("txt") || ext.equals("jpg"))) {
							System.out.println("上传类型有误");
							return;
						}
						// 获取文件内容并上传
						// 定义文件路径
						// 获取服务器路径方法
//						request.getSession().getServletContext().getRealPath("uploadFile");
						String path = "D:\\uploadFile";
						File file = new File(path, fileName);

						item.write(file);
						System.out.println(fileName + "-----上传成功!");
						return;
					}
				}
			} catch (FileUploadBase.SizeLimitExceededException e) {
				System.out.println("上传文件大小超过限制!");
			} catch (FileUploadException e) {
				e.printStackTrace();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}

下载

下载文件

WebContent/res/

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="UploadServlet"  method="post" enctype="multipart/form-data"> 
		学号:<input  type="text" name="sno" /></br>
		姓名:<input  type="text" name="sname" /></br>
		上传照片:<input  type="file" name="spicture" /></br>
		<input type="submit" value="上传" />
	</form>
	<a href="DownloadServlet?filename=服务器.txt">下载</a>
</body>
</html>

DownloadServlet.java

public class DownloadServlet extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		//获取需要下载名字
		String fileName = request.getParameter("filename");
		
		//下载文件,需要设置消息头
		response.addHeader("content-Type", "application/octet-stream");//二进制文件都可以下载
		
		//获取客户端的User-Agent信息
		String header = request.getHeader("User-Agent");
		if(header.toLowerCase().indexOf("qqbrowser") !=-1) {
			//QQ浏览器下载
			response.addHeader("content-Disposition", "attachment;filename==?UTF-8?B?"+new String(Base64.encode(fileName.getBytes("utf-8")) )+"?=");//flineName包含了文件扩展名
		}else {
			//Edge浏览器下载,文件名乱码问题
			response.addHeader("content-Disposition", "attachment;filename="+URLEncoder.encode(fileName,"utf-8"));//flineName包含了文件扩展名
			
		}
		
		//Servlet通过文件地址,将文件转为输入流读到Servlet中
		InputStream in = getServletContext().getResourceAsStream("/res/"+fileName);
		
		//通过输出流将刚才的输入流输出给用户
		ServletOutputStream out = response.getOutputStream();
		byte[] bs=new byte[10];
		int len=-1;
		while((len=in.read(bs)) !=-1) {
			out.write(bs, 0, len);
		}
		out.close();
		in.close();
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

最后可以关注一下我个人微信公众号,不定期更新一些好用的资源以及生活上的点点滴滴~~

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值