文件的上传以及下载

您所在的位置:网站首页 filedownload文件 文件的上传以及下载

文件的上传以及下载

#文件的上传以及下载| 来源: 网络整理| 查看: 265

B/S结构文件的上传以及下载

当我们在项目开发中,一些文件的上传以及下载功能是必不可少的,最近在修改公司项目的bug时就遇到了下载的实现,当时自己想到了前端使用ajax请求后端接口,后端使用i/o流进行下载文件,可是发现ajax请求并不能实现下载的功能,后来又想到使用表单提交进行文件的下载,但是该方法不能提供callback函数,不能对下载进行监听,所以上网搜了搜有一种方法叫$.fileDownload,其可以实现文件的下载并且可以在下载完成时获取一个回调函数,并且可以支持多种浏览器。

一、文件的下载:

前端:$.fileDownload方法请求接口

后端:springmvc框架、使用i/o流进行文件的下载

注意⚠️:在使用$.fileDownload的时候需要引入js文档(根据自己的路径,仅供参考):

不多说,来个例子实战一下:

前端代码:

function download() { //定义后台的接口,注意路径 var url = "/XX/XXX"; $.fileDownload(url, { data : { //传到后台的数据 path : "${result.data}" }, prepareCallback : function(url) { //下载开始之前得回调函数 }, successCallback : function(url) { //下载成功之后的回调函数 }, failCallback : function(html, url) { //下载失败的毁掉函数 } }); }

后端接口代码:

@RequestMapping("download") @ResponseBody public void download(HttpServletRequest request, HttpServletResponse response) { //获取前台下载的路径 String path = request.getParameter("path"); File file = new File(path); String filename = file.getName(); InputStream fis; OutputStream os; try { response.reset(); response.setHeader("Content-Disposition", "attachment; filename=" + filename); response.setContentType("application/octet-stream; charset=UTF-8"); response.setHeader("Content-Length", String.valueOf(file.length())); fis = new FileInputStream(file); os = response.getOutputStream(); int b; while ((b = fis.read()) != -1) { os.write(b); } os.flush(); os.close(); fis.close(); } catch (Exception e) { e.printStackTrace(); } }

后端有个注意点⚠️: 后端代码必须添加response.setHeader(“Set-Cookie”, “fileDownload=true; path=/”); jQuery以此判断下载是否成功。如果不添加上面的语句,则successCallback回调函数失效

最后:就可以实现文件的下载啦! 这里写图片描述

二、文件的上传:

前端:

Insert title here

这里写图片描述

后端:

需要 commons-fileupload-1.2.1 jar包 commons-io-2.0 jar包(依赖)

package www.zuo.Servlet; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; @WebServlet("/FileUpload") public class FileUploadUtil 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 { request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); /* 创建DiskFileItemFactory工厂*/ DiskFileItemFactory factory = new DiskFileItemFactory(); /*定义一个文件上传解析器*/ ServletFileUpload upload = new ServletFileUpload(factory); /* 解决上传文件中出现的中文乱码*/ upload.setHeaderEncoding("UTF-8"); /* 设置内存的临界值为500kb*/ factory.setSizeThreshold(1024 * 500); /* 新建一个目录用于存放大于500k的文件*/ File temp = new File("/Users/zuoxianyong/temp"); factory.setRepository(temp); upload.setSizeMax(1024 * 1024 * 5); try { /* 1. 得到 FileItem 的集合 items*/ List items = upload.parseRequest(request); /* 2. 遍历 items:*/ for (FileItem item : items) { /* 若是一个一般的表单域, 打印信息*/ if (item.isFormField()) { String name = item.getFieldName(); String value = item.getString("utf-8"); System.out.println(name + ": " + value); } else { String fileName = item.getName(); long sizeInBytes = item.getSize(); System.out.println(fileName); System.out.println(sizeInBytes); InputStream in = item.getInputStream(); byte[] buffer = new byte[1024]; int len = 0; /* 文件最终上传的位置*/ fileName = "/Users/zuoxianyong/file/" + fileName; System.out.println(fileName); OutputStream out = new FileOutputStream(fileName); while ((len = in.read(buffer)) != -1) { out.write(buffer, 0, len); } out.close(); in.close(); } } } catch (FileUploadException e) { e.printStackTrace(); } } }

注意⚠️: 当tomcat容器启动失败时报 failed to start component … 基本是找不到jar包,jar包应该放在WEB-INF/lib下面



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3