zoukankan      html  css  js  c++  java
  • 文件的上传与下载(2)

        文件的上传与下载

    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     }
  • 相关阅读:
    结构体、共用体
    strlen函数,strcat函数,strcpy函数,strncpy函数,strcmp函数
    memmove函数
    Spring Boot——2分钟构建spring web mvc REST风格HelloWorld
    maven3常用命令、java项目搭建、web项目搭建详细图解
    C++中的const关键字
    Pyp 替代sed,awk的文本处理工具
    Python 中的进程、线程、协程、同步、异步、回调
    Python-aiohttp百万并发
    学习Python的三种境界
  • 原文地址:https://www.cnblogs.com/xiaocao123/p/9560607.html
Copyright © 2011-2022 走看看