文件的上传与下载

Posted xiaocao123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件的上传与下载相关的知识,希望对你有一定的参考价值。

    文件的上传与下载

1、文件的上传

1.1、前端代码:

1 <form action="${pageContext.request.contextPath}/upload.do" enctype="multipart/form-data" method="post">
2   上传文件1:<input type="file" name="file1"></br>
3   上传文件2:<input type="file" name="file2"></br>
4   上传文件3:<input type="file" name="file3"></br>
5   <input type="submit" value="提交"/>${result}
6 </form>

其中关于enctype的用法。

application/x-www-form-urlencoded不是不能上传文件,是只能上传文本格式的文件,multipart/form-data是将文件以二进制的形式上传,这样可以实现多种类型的文件上传

 

1.2、后端代码

web.xml代码:

1 <servlet>
2         <servlet-name>UploadServlet</servlet-name>
3         <servlet-class>uploadServlet.UploadServlet2</servlet-class>
4     </servlet>
5     <servlet-mapping>
6         <servlet-name>UploadServlet</servlet-name>
7         <url-pattern>/upload.do</url-pattern>
8     </servlet-mapping>

 

servlet代码:

 1 public class UploadServlet2 extends HttpServlet {
 2 
 3     @Override
 4     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 5         //super.doGet(req, resp);
 6         doPost(req,resp);
 7     }
 8 
 9     @Override
10     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
11         /**设置上传保存路径*/
12         String filePath = getServletContext().getRealPath("/")+"images";
13         File file = new File(filePath);
14         if (!file.exists()){
15             file.mkdir();
16         }
17         SmartUpload smartUpload = new SmartUpload();
18         /**初始化对象*/
19         smartUpload.initialize(getServletConfig(),req,resp);
20         /**设置上传文件大小*/
21         smartUpload.setMaxFileSize(1024*1024*100);
22         /**设置所有文件的大小*/
23         smartUpload.setTotalMaxFileSize(1024*1024*1000);
24         /**设置允许上传文件的类型*/
25         smartUpload.setAllowedFilesList("txt,jpg,png,gif");
26         String result = "上传成功";
27         try {
28             smartUpload.setDeniedFilesList("rar,jsp,js");
29             smartUpload.upload();
30             int count = smartUpload.save(filePath);
31             System.out.println("上传成功了:"+count+"文件");
32         } catch (Exception e) {
33             result = "上传失败";
34             e.printStackTrace();
35         }
36    
37         req.setAttribute("result",result);
38         req.getRequestDispatcher("/index.jsp").forward(req,resp);
39 
40     }
41 }

 

 

2、文件的下载

2.1  前端代码

注意:发送的是一个get请求

下载:<a href="${pageContext.request.contextPath}/download.do?filename=01.mp4">下载</a>

 

2.2 servlet代码

注意如果发送的是一个GET请求,一定要将super.doGet(req,resp);方法注释掉;

否则会报错HTTP Status 405 - HTTP method GET is not supported by this URL。

原因是父类中返回的信息(查看原码可知)。

 1 /**
 2  * @Author: jack
 3  * @Create: 2018-08-29-16:25
 4  * @Desc:
 5  **/
 6 public class UploadServlet3 extends HttpServlet {
 7 
 8     @Override
 9     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
10 //        super.doGet(req, resp);
11         doPost(req,resp);
12 
13     }
14 
15     @Override
16     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
17         /**获取文件名*/
18         String filename = req.getParameter("filename");
19         /**初始化对象*/
20         SmartUpload su = new SmartUpload();
21         su.initialize(getServletConfig(),req,resp);
22         /**设定contentDisposition为null以禁止浏览器自动打开文件*/
23         su.setContentDisposition(null);
24         try {
25             /**文件在服务器的地址*/
26             su.downloadFile("/images/"+filename);
27         } catch (SmartUploadException e) {
28             e.printStackTrace();
29         }
30     }
31 }

 

3、服务器向浏览器发送文件

3.1 前端代码

 1 <img id="img" src="">
 2     <button onclick="showImg()">显示</button>
 3     <button onclick="coverImg()">隐藏</button><br/>
 4 
 5 <script>
 6         /**显示图片*/
 7         function showImg() {
 8             var img = document.getElementById("img");
 9                 img.setAttribute("src","/image");
10 
11         }
12         /**隐藏图片*/
13         function coverImg() {
14             var img = document.getElementById("img");
15             img.setAttribute("src","");
16         }
17 </script>    

 

3.2 java后台代码

 1 **
 2      * 服务器向浏览器发送图片流
 3      * @param response
 4      * @throws IOException
 5      */
 6     @RequestMapping("/image")
 7     public void demo(HttpServletResponse response) throws IOException {
 8         /**设置编码格式*/
 9         response.setContentType("charset=utf-8");
10         /**文件所在的位置*/
11         File file = new File("F:/temp/1.jpg");
12         FileInputStream in = new FileInputStream(file);
13         /**创建输出流向网页输入内容*/
14         OutputStream out = response.getOutputStream();
15         byte[] buffer = new byte[1024];
16         int len;
17         while ((len=in.read(buffer)) > 0){
18             out.write(buffer,0,len);
19         }
20         /**关闭流*/
21         in.close();
22 
23     }

 


以上是关于文件的上传与下载的主要内容,如果未能解决你的问题,请参考以下文章

文件的上传与下载

性能工具之 JMeter 上传与下载脚本编写

springboot项目关于文件的上传与下载

文件上传与下载

Android文件上传与下载

上传与下载文件