JavaWeb实现文件的上传与下载

JavaWeb实现文件的上传与下载

第一步:导包

导入commons-fileupload-1.3.3.jar和commons-io-2.4.jar两个依赖包

第二步:编写前端页面

1、提交页面 index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>Insert title here</title>
	</head>
	<body>
		<form action="${pageContext.request.contextPath }/fileUpload" method="post" enctype="multipart/form-data">
			头像:<input type="file" name="img" accept="image/*"/>
			<input type="submit" value="提交"/>
		</form>
	</body>
</html>

2、结果页面 result.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>
	<center>
		<a href="${pageContext.request.contextPath }/download?filename=${filename}">
			<img alt="xx" src="${src }">
		</a>
	</center>
</body>
</html>

第三步:编写上传和下载代码

1、上传图片 fileUpload.java

package cn.yz123123.controller;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;

@WebServlet("/fileUpload")
@MultipartConfig
public class fileUpload extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//String username = request.getParameter("username");
		Part part = request.getPart("img");
		
		//获取文件的真实名称
		String header = part.getHeader("content-disposition");
		String realName = header.substring(header.indexOf("filename=")+10, header.length()-1);
		
		//获取文件自身流
		InputStream inputStream = part.getInputStream();
		
		//获取file真实路径,如果没有则创建
		String dir = request.getServletContext().getRealPath("/file/");
		File dirFile = new File(dir);
		//上面只是实例化了一个对象,并没有真正的创建一个文件夹
		if (!dirFile.exists()) {
			dirFile.mkdirs();
		}
		
		//创建文件对象,并用流的形式写在相应的文件夹中
		File file = new File(dir, realName);
		FileOutputStream fileOutputStream = new FileOutputStream(file);
		
		byte[] buf = new byte[1024];
		int len;
		while((len=inputStream.read(buf))!=-1) {
			fileOutputStream.write(buf, 0, len);
		}
		
		fileOutputStream.close();
		inputStream.close();
		
		//以下为测试
		request.setAttribute("src", request.getContextPath()+"/file/"+realName);
		request.setAttribute("filename", realName);
		request.getRequestDispatcher("/result.jsp").forward(request, response);
	}
	
}

2、下载图片 fileDownload.java

package cn.yz123123.controller;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.UUID;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(urlPatterns = "/download")
public class fileDownload extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		String filename = req.getParameter("filename");
		
		//获取文件的真实路径
		String filePath = req.getServletContext().getRealPath("/file/"+filename);
		
		FileInputStream fileInputStream = new FileInputStream(filePath);
		
		resp.setCharacterEncoding("UTF-8");
		resp.setHeader("Content-Disposition","attachment;filename="+UUID.randomUUID()+filename);
		
		ServletOutputStream outputStream = resp.getOutputStream();
		
		byte[] buf = new byte[1024];
		int len;
		
		while((len=fileInputStream.read(buf))!=-1) {
			outputStream.write(buf, 0, len);
		}
		outputStream.close();
		fileInputStream.close();
		
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		super.doGet(req, resp);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值