废话不多说直接上代码!
这是上传文件的代码
package com.bjpowernode;
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;
import java.io.IOException;
import java.util.UUID;
// 映射路径
@WebServlet("/upload")
@MultipartConfig
public class Upload extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Part image = req.getPart("image");
// 获取文件名称
String submittedFileName = image.getSubmittedFileName();
// 获取文件类型
String contentType = image.getContentType();
// 获取文件大小
long size = image.getSize();
// 截取文件的后缀名
String substring = submittedFileName.substring(submittedFileName.lastIndexOf("."));
// 新的文件名
String newName = UUID.randomUUID() + substring;
System.out.println(newName);
// 判断文件类型
if (!contentType.endsWith("png")){
return;
}
// 判断文件大小是否符合要求
if (size > 10485760){
return;
}
image.write("F:\\java\\javaweb\\file_uploading\\web\\upload\\"+newName);
}
}
这是前端代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>上传</title>
</head>
<body>
<form action="/upload" method="post" enctype="multipart/form-data">
请选择文件<input type="file" name="image">
<br>
<button type="submit">提交</button>
</form>
</body>
</html>
这是下载的后台代码
package com.bjpowernode;
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;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URLEncoder;
@WebServlet("/download")
public class DownloadServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 获取下载的文件名字
String fileName = req.getParameter("fileName");
// 设置点击下载的时候文件不被打开
resp.setContentType("application/x-download");
// 通过header 修改 下载的文件的名称 如果不设置 header 它会使用默认名称 来作为下载文件的名称 (download)
// URLEncoder.encode(fileName,"utf-8") 把编码记性设置 , 必须要在 设置头信息的 同时 去修改编码
resp.setHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode(fileName,"utf-8") );
// 根据文件的路径 ,准备文件输入流
FileInputStream fileInputStream = new FileInputStream(new File("F:\\java\\javaweb\\file_uploading\\web\\imgae\\" + fileName));
// 准备下载的路径 浏览器默认的下载路径
ServletOutputStream outputStream = resp.getOutputStream();
// 循环取出流中的数据
int len = 0;
byte[] buffer = new byte[2048];
while ((len = fileInputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, len);
outputStream.flush();
}
outputStream.close();
fileInputStream.close();
}
}
这是下载的前端代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>下载</title>
</head>
<body>
<a href="/download?fileName=h1.png">截图</a>
</body>
</html>