package controller;
import domain.File;
import jdbc.FileJdbc;
import jdbc.ServerJdbc;
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.*;
import java.net.URLEncoder;
import java.util.UUID;
/**
* Created by Solitude on 2017-6-13.
*/
@WebServlet("/fileController")
@MultipartConfig
public class FileController extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
String type = req.getParameter("type");
int serverId = Integer.parseInt(req.getParameter("serverId"));
String rootPath = "C:\\Users\\dell\\IdeaProjects\\myweb\\web\\WEB-INF\\settingfiles";
if ("upload".equals(type)) {
try {
Part part = req.getPart("uploadFile");
//获取请求的信息
String name = part.getHeader("content-disposition");
System.out.println(name);
// String value1 = part.getName();
String fileName = new String(part.getSubmittedFileName().getBytes("GBK"), "UTF-8");
// System.out.println(value1 + " " + fileName);
// String rootPath = req.getServletContext().getRealPath("settingfiles");获得的是部署后的路径
// String rootPath = "C:\\Users\\dell\\IdeaProjects\\myweb\\web\\WEB-INF\\settingfiles";
System.out.println("测试上传文件的路径:" + rootPath);
// 获得文件名后缀
String fileSuffix = name.substring(name.lastIndexOf("."), name.length() - 1);
System.out.println("测试获取文件的后缀:" + fileSuffix);
//生成一个新的文件名,不重复,数据库存储的就是这个文件名,不重复的
String fileSaveName = UUID.randomUUID().toString();
String filename = rootPath + "\\" + fileSaveName + fileSuffix;
System.out.println("测试产生新的文件名:" + filename);
part.write(filename);
// 把文件信息存到数据库
File file = new File(fileName, fileSuffix, fileSaveName);
FileJdbc.insertAFile(file);
// get file id
int id = FileJdbc.getFileIdByFileSaveName(fileSaveName);
// set server's settingFileId
ServerJdbc.updateSettingFileId(id, serverId);
PrintWriter out = resp.getWriter();
out.println("上传成功!");
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
String type = req.getParameter("type");
int serverId = Integer.parseInt(req.getParameter("serverId"));
String rootPath = "C:\\Users\\dell\\IdeaProjects\\myweb\\web\\WEB-INF\\settingfiles\\";
if ("download".equals(type)) {
// download file
// get settingFileid
int settingFileId = ServerJdbc.getSettingFileId(serverId);
System.out.println(settingFileId);
File file = FileJdbc.getFileById(settingFileId);
String absolutePath = rootPath + file.getFileSaveName() + file.getFileSuffix();
String realFileName = file.getFileName() + file.getFileSuffix();
InputStream inputStream = new FileInputStream(absolutePath);
//设置相应类型application/octet-stream
System.out.println(absolutePath + " " + realFileName);
//resp.setContentType("application/x-msdownload");
resp.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(realFileName, "UTF-8"));
OutputStream outputStream = resp.getOutputStream();
System.out.println(absolutePath);
int len = -1;
byte[] b = new byte[1024];
while ((len = inputStream.read(b)) != -1) {
outputStream.write(b, 0, len);
}
inputStream.close();
outputStream.close();
}
}
}
jsp/servlet上传文件
最新推荐文章于 2021-02-27 04:47:33 发布