码迷,mamicode.com
首页 > Web开发 > 详细

文件的上传与下载(2)

时间:2018-08-30 16:44:30      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:encode   std   response   Servle   download   -name   isp   父类   后台   

    文件的上传与下载

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     }

 

文件的上传与下载(2)

标签:encode   std   response   Servle   download   -name   isp   父类   后台   

原文地址:https://www.cnblogs.com/xiaocao123/p/9560607.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!