
META-INF.resources.admin.docs.files.jsp Maven / Gradle / Ivy
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="admin" uri="http://www.infop.cn/tag/admin"%>
文件
介绍
文件管理一直是管理软件的基础功能。有些客户要将文件存储在磁盘里,有些客户要将文件存储在数据库里。本系统已经实现这两个功能。
文件采用Servlet的
Part
类进行上传。使用非常简单,只要四步:
- 实例化
cn.infop.dao.FileDao
类
- 通过
request.getPart()
获取文件实例
- 调用
cn.infop.dao.FileDao
类实例方法public String savePartToDisk(Part part)
将文件保存到磁盘;方法private String
saveFileToBlobk(Part part)
将文件保存到数据库。参数传入第二步的Part实例,保存成功将返回一个访问文件的URI
- 调用第三步返回的URI访问文件
- 第三步返回的URI与某个应用表的主键保存到弱实体表,可以实现一条记录保存多个文件
上传文件
上传文件需要结合form和Servlet才能正确的上传。
form必须提供必须的信息,如:
<form method="POST" action="console/user-save.do"
enctype="multipart/form-data">
<input type="file" name="avatar" id="avatar"
accept="image/gif,image/jpeg,image/png">
<button type="submit">保存</button>
</form>
上传文件的表单form必须有属性enctype="multipart/form-data"
而上传文件的Servlet也有些是必须的:
package cn.infop.controller.user;
import java.io.IOException;
import java.sql.SQLException;
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 org.apache.commons.lang3.StringUtils;
import cn.infop.dao.FileDao;
import cn.infop.dao.UserDao;
import cn.infop.entity.User;
import cn.infop.tools.ConstantUtils;
//必须配置MultipartConfig才能上传文件
@MultipartConfig
@WebServlet("/console/user-save.do")
public class UserSave extends HttpServlet {
private static final long serialVersionUID = 6061716542948789392L;
//提取文件名
private String getFileName(Part part) throws IOException {
String header = part.getHeader("content-disposition");
String value = header.substring(header.indexOf("filename=\"") + 10, header.lastIndexOf("\""));
return value.startsWith("; name=\"") ? "" : value;
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
UserDao dao = new UserDao();
User user = null;
String avatar_url = "";
String username = request.getParameter("username");
String password = request.getParameter("password");
String phone = request.getParameter("phone");
FileDao fileDao = new FileDao();
//获取part实例,Servlet3.0及上以提供part来上传文件
Part part = request.getPart("avatar_url");
//提取上传的文件名
String new_file_name = getFileName(part);
//通过判断有没有文件名来决定要不要调用保存文件的方法。这样做可以避免没有文件也上传产生的错误。
if (StringUtils.isNotEmpty(new_file_name))
//文件保存成功后,将返回一个访问文件的url
avatar_url = fileDao.savePartToDisk(part);
//再将返回一个访问文件的url放到主记录中保存
user = new User(username, password, false, avatar_url, phone);
try {
dao.save(user);
request.setAttribute("msg", ConstantUtils.MSG_SAVED);
} catch (SQLException e) {
request.setAttribute("msg", ConstantUtils.MSG_SAVE_FAILED);
e.printStackTrace();
}
request.getRequestDispatcher("/console/user-list.jsp").forward(request, response);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy