南昌模板建站代理,南通住房和城乡建设部网站首页,四网合一的网站,濮阳做网站的公司有哪些一 文件上传
1 介绍 用户选择本地文件资源保存到服务器上#xff0c;Servlet需要将二进制数据以文件保存到服务器磁盘中#xff0c;再将磁盘路径保存到数据库中
2 项目搭建 创建web项目#xff0c;并添加对应jar包(JSTL)
3 API
HttpServletRequest 方法–从请求中解析上…一 文件上传
1 介绍 用户选择本地文件资源保存到服务器上Servlet需要将二进制数据以文件保存到服务器磁盘中再将磁盘路径保存到数据库中
2 项目搭建 创建web项目并添加对应jar包(JSTL)
3 API
HttpServletRequest 方法–从请求中解析上传的文件
返回值方法作用PartgetPart(String name)用于获取请求中指定 name 的文件CollectiongetParts()获取请求中全部的文件
Part 方法
返回值方法作用voidwrite(String fileName)直接把接收到的文件保存到磁盘中voidgetContentType()获取文件的类型 MIMEStringgetHeader(String name)获取请求头信息longgetSize()获取文件的大小 为 Servlet 添加注解 MultipartConfig 使用 getPart() 获取请求中指定 name 的文件到 Part 对象中,再使用 write 方法保存文件到指定目录
4 例子
① upload.jsp
% page contentTypetext/html;charsetUTF-8 languagejava %
html
headtitle用户注册/title
/head
body
h3注册/h3
%--enctypemultipart/form-data表示需要二进制数据--%
form action/fileupload methodpost enctypemultipart/form-dataspan stylecolor: red${errorMsg}/spanp姓名input typetext nameusername/pp头像input typefile nameheadImg/ppinput typesubmit value提交/p
/form
/body
/html② UploadServlet
WebServlet(/fileupload)
//文件上传注解 maxFileSize单个上传文件大小 maxRequestSize请求中数据的大小 单位都为bytes
MultipartConfig(maxFileSize 105560)
public class RegisterServlet extends HttpServlet {Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {try {String username req.getParameter(username);//获取表单文件封装的对象Part part req.getPart(headImg);//使用工具类实现上传String filename UploadUtil.uploadImg(req, resp, part);System.out.println(filename);} catch (Exception e) {e.printStackTrace();//上传的图片大小超过最大值给出提示req.setAttribute(errorMsg,上传的图片太大了);req.getRequestDispatcher(register.jsp).forward(req,resp);return;}}
}③ 工具类
public class UploadUtil {public static String uploadImg(HttpServletRequest req, HttpServletResponse resp,Part part){try {//上传文件的类型String contentType part.getContentType();if (!contentType.startsWith(image)){//上传的不是图片页面给出提示req.setAttribute(errorMsg,上传文件须是图片);req.getRequestDispatcher(register.jsp).forward(req,resp);return null;}//获取文件的名称pic.pngString fileName part.getSubmittedFileName();//获取源文件类型或后缀名String type fileName.substring(fileName.lastIndexOf(.));String s UUID.randomUUID().toString().replace(-,);//使用uuid生成32位随机字符//设置新的文件名称String newfilenamestype;//设置上传的目标目录地址String pathD:\\java\\upload\\;//将上传的文件保存到目标地址part.write(pathnewfilename);return newfilename;} catch (Exception e) {e.printStackTrace();}return null;}
}④ 若想同时上传多张图片可修改 UploadServlet
WebServlet(/fileupload)
MultipartConfig(maxFileSize 80000, maxRequestSize 140000)
//支持文件上传的注解
MultipartConfig
public class UploadServlet extends HttpServlet {Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding(UTF-8);try {//获取表单文件封装的对象集合CollectionPart parts req.getParts();for (Part part : parts) {//上传文件的类型String contentType part.getContentType();if (contentType ! null) { // input 类型是 file// 判断上传的文件类型合法不if(!contentType.startsWith(image/)){req.setAttribute(errorMsg, 请上传图片);req.getRequestDispatcher(/upload.jsp).forward(req,resp);return;}//获取文件的名称cat.pngString fileName part.getSubmittedFileName();//获取源文件类型或后缀名String type fileName.substring(fileName.lastIndexOf(.));String s UUID.randomUUID().toString().replace(-,);//使用uuid生成32位随机字符//设置新的文件名称String newfilenamestype;//设置上传的目标目录地址String pathD:\\java\\upload\\;//将上传的文件保存到目标地址part.write(pathnewfilename);}else { // input 类型非 fileSystem.out.println(req.getParameter(part.getName()));}}} catch (Exception e) {e.printStackTrace();//上传的图片大小超过最大值给出提示req.setAttribute(errorMsg,上传的图片太大了);req.getRequestDispatcher(register.jsp).forward(req,resp);return;}}
}二 文件下载
1 介绍 下载服务器资源到用户电脑中,服务器文件需放在 WEB-INF中放在外面用户只需要拿到下载的超链接都能够下载将文件放在 WEB-INF 下用户不可以直接访问须请求到 Servlet 来处理在对应 service 方法中编写下载限制操作
2 项目搭建 web 下新建 download 目录提供两个资源包
3 例子
download.jsp
% page contentTypetext/html;charsetUTF-8 languagejava %
html
headtitle文件下载/title
/head
body
h3超链接下载当文件在WEB-INF下时无效/h3
pa href/download/大黄.rar大黄.rar/a/p
pa href/download/小黄.rar小黄.rar/a/ph3后台servlet下载/h3
pa href/download?filename大黄.rar大黄.rar/a/p
pa href/download?filename小黄.rar小黄.rar/a/p
/body
/htmlDownloadServlet
WebServlet(/download)
public class DownloadServlet extends HttpServlet {Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取文件名称String filename req.getParameter(filename);//获取路径String path getServletContext().getRealPath(/WEB-INF/download/);//设置中文转码//String newfilename URLEncoder.encode(filename, utf-8);//默认Tomcat 服务器未告知浏览器文件的名称需手动设置响应头来告知浏览器文件名称String newfilename new String (filename.getBytes(UTF-8), ISO-8859-1);//设置下载的文件名resp.setHeader(content-disposition,attachment;filenamenewfilename);//实现文件的下载Files.copy(Paths.get(path,filename),resp.getOutputStream());}
}