• 文件的上传与下载---------------------待补充


    一:文件上传

    1.表单需要的准备一知识点

      请求方式为post,不方便使用get

      使用file表单域,type=“file”

      使用的编码方式是二进制,enctype=“multipart/form-data”

        表单的默认值是application/x-www-form-urlencoded,试用与少量的字符集。

    2.服务端准备

      不能使用request.getParamete获取信息,因为编码方式已经改了。

      可以使用输入流的方式,但是不建议

      具体使用commons-fileupload完成上传操作

    3.加入两个jar包

      commons-fileupload-1.3.3.jar

      commons-io-2.5.jar

    4.基本思想

      commons-fileupload:

        可以解析请求,得到FileItem对象组成的List

        把所有的请求信息都解析为FileItem对象,无论是文本域还是文件域

        可以调用FileItem的isFormField方法判断是一个表单域或不是一个表单域

        再进一步获取信息

          

    二:helloUpload程序

    1.upload.jsp

     1 <%@ page language="java" contentType="text/html; charset=utf-8"
     2     pageEncoding="utf-8"%>
     3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     4 <html>
     5 <head>
     6 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
     7 <title>Insert title here</title>
     8 </head>
     9 <body>
    10     <form action="uploadServlet" method="post" enctype="multipart/form-data">
    11         File:<input type="file" name="file"/>
    12         <br><br>
    13         Desc:<input type="text" name="desc"/>
    14         <br>
    15         <input type="submit" value="Submit">
    16     </form>
    17 </body>
    18 </html>

    2.UploadServlet.java

     1 package com.web;
     2 
     3 import java.io.File;
     4 import java.io.FileOutputStream;
     5 import java.io.IOException;
     6 import java.io.InputStream;
     7 import java.io.OutputStream;
     8 import java.util.List;
     9 
    10 import javax.servlet.ServletException;
    11 import javax.servlet.annotation.WebServlet;
    12 import javax.servlet.http.HttpServlet;
    13 import javax.servlet.http.HttpServletRequest;
    14 import javax.servlet.http.HttpServletResponse;
    15 
    16 import org.apache.commons.fileupload.FileItem;
    17 import org.apache.commons.fileupload.FileUploadException;
    18 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    19 import org.apache.commons.fileupload.servlet.ServletFileUpload;
    20 
    21 
    22 @WebServlet("/uploadServlet")
    23 public class UploadServlet extends HttpServlet {
    24     
    25     private static final long serialVersionUID = 1L;
    26 
    27     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    28         DiskFileItemFactory factory=new DiskFileItemFactory();
    29         factory.setSizeThreshold(1024*1024*7);
    30         File tempDirectory=new File("d:\tempDirectory");
    31         factory.setRepository(tempDirectory);
    32         
    33         ServletFileUpload upload=new ServletFileUpload(factory);
    34         upload.setSizeMax(1024*1024*5);
    35         try {
    36             List<FileItem> items=upload.parseRequest(request);
    37             for(FileItem item : items) {
    38                 if(item.isFormField()) {
    39                     String name=item.getFieldName();
    40                     String value=item.getString();
    41                     System.out.println(name+"==="+value);
    42                 }else {
    43                     String fieldName=item.getFieldName();
    44                     String fileName=item.getName();
    45                     
    46                     //获取不带路径的文件名
    47                     int start = fileName.lastIndexOf("\");  
    48                     String fileName2 = fileName.substring(start+1);
    49                     
    50                     String contentType=item.getContentType();
    51                     boolean isInMemory=item.isInMemory();
    52                     long sizeInBytes=item.getSize();
    53                     System.out.println(fieldName);
    54                     System.out.println(fileName);
    55                     System.out.println(fileName2);
    56                     System.out.println(contentType);
    57                     System.out.println(isInMemory);
    58                     System.out.println(sizeInBytes);
    59                     
    60                     InputStream in=item.getInputStream();
    61                     byte[] buffer=new byte[1024];
    62                     int len=0;
    63                     fileName2="d:\files\"+fileName2;
    64                     System.out.println(fileName2);
    65                     OutputStream out=new FileOutputStream(fileName2);
    66                     while((len=in.read(buffer))!=-1) {
    67                         out.write(buffer, 0, len);
    68                     }
    69                     out.close();
    70                     in.close();
    71                 }
    72             }
    73         } catch (FileUploadException e) {
    74             e.printStackTrace();
    75         }
    76     }
    77 
    78 }

    3.结果

      

    三:应用

    1.需求

      上传

        在页面上使用jquery实现新增一个附件,删除附件,但是需要保留一个

        对文件的扩展名与文件的大小进行验证,若是出现错误,在页面上显示错误信息,如果通过验证,文件上传后文件名不能重复,在对应的数据表中增加一条记录

      下载

    2.添加jquery的包

      jquery-1.7.2.js

    3.项目目录

    4.upload.jsp

     1 <%@ page language="java" contentType="text/html; charset=utf-8"
     2     pageEncoding="utf-8"%>
     3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     4 <html>
     5 <head>
     6 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
     7 <title>Insert title here</title>
     8 <script type="text/javascript" src="jquery-1.7.2.js"></script>
     9 <script type="text/javascript">
    10 $(function(){
    11     
    12     var i = 2;
    13     
    14     $("#addFile").click(function(){
    15         //添加
    16         $(this).parent().parent().before("<tr class='file'><td>File"
    17                 +i+":</td><td><input type='file' name='file"
    18                 +i+"'</td></tr>"
    19                 +"<tr class='desc'><td>Desc"
    20                 +i+":</td><td><input type='text' name='desc"
    21                 +i+"'/><button id='delete"
    22                 +i+"'>删除</button></td></tr>");
    23         i++;
    24         //删除
    25         $("#delete"+(i-1)).click(function(){
    26             var $tr=$(this).parent().parent()
    27             $tr.prev("tr").remove()
    28             $tr.remove()
    29             //对i进行排序
    30             $(".file").each(function(index){
    31                 $(this).find("td:first").text("File"+(index+1))
    32                 $(this).find("td:last input").attr("name","file"+(index+1))
    33             });
    34             $(".desc").each(function(index){
    35                 $(this).find("td:first").text("Desc"+(index+1))
    36                 $(this).find("td:last input").attr("name","desc"+(index+1))
    37             })
    38         })
    39         
    40         return false;
    41     })
    42 });
    43 </script>
    44 </head>
    45 <body>
    46     <font color="red">${message }</font>
    47     <br><br>    
    48     <form action="fileuploadservlet" method="post" enctype="multipart/form-data">
    49         
    50         <table>
    51             <tr class="file">
    52                 <td>File1:</td>
    53                 <td><input type="file" name="file1"/></td>
    54             </tr>
    55             <tr class="desc">
    56                 <td>Desc1:</td>
    57                 <td><input type="text" name="desc1"/></td>
    58             </tr>
    59             
    60             <tr>
    61                 <td><input type="submit" id="submit" value="提交"/></td>
    62                 <td><button id="addFile">新增一个附件</button></td>
    63             </tr>
    64         </table>
    65         
    66     </form>
    67 </body>
    68 </html>

    5.效果图

      

    6.配置文件upload.properties

    1 exts=pptx,docx,doc
    2 file.max.size=1048576
    3 total.file.max.size=5242880

    7.对properties操作的工具类FileUploadAppProperties.java

     1 package com.web.app.utils;
     2 
     3 import java.util.HashMap;
     4 import java.util.Map;
     5 
     6 public class FileUploadAppProperties {
     7     private FileUploadAppProperties() {}
     8     
     9     private static Map<String,String> properties=new HashMap<>();
    10     
    11     private static FileUploadAppProperties instance=new FileUploadAppProperties();
    12     
    13     public  static FileUploadAppProperties getInstance() {
    14         return instance;
    15     }
    16     
    17     public static void addProperty(String propertyName,String propertyValue) {
    18         properties.put(propertyName, propertyValue);
    19     }
    20     
    21     public static String getProperty(String propertyName) {
    22         return properties.get(propertyName);
    23     }
    24 }

    8.使用监听器进行初始化FileUploadAppListener.java

     1 package com.web.app.listener;
     2 
     3 import java.io.InputStream;
     4 import java.util.Map;
     5 import java.util.Properties;
     6 
     7 import javax.servlet.ServletContextEvent;
     8 import javax.servlet.ServletContextListener;
     9 import javax.servlet.annotation.WebListener;
    10 
    11 import com.web.app.utils.FileUploadAppProperties;
    12 
    13 @WebListener
    14 public class FileUploadAppListener implements ServletContextListener {
    15 
    16     public FileUploadAppListener() {
    17         
    18     }
    19 
    20     public void contextInitialized(ServletContextEvent arg0)  { 
    21         InputStream in=getClass().getClassLoader().getResourceAsStream("/upload.properties");
    22         Properties properties=new Properties();
    23         try {
    24             properties.load(in);
    25             for(Map.Entry<Object, Object> pro:properties.entrySet()) {
    26                 String propertyName=(String) pro.getKey();
    27                 String propertyValue=(String) pro.getValue();
    28                 FileUploadAppProperties.getInstance().addProperty(propertyName, propertyValue);
    29             }
    30         } catch (Exception e) {
    31             e.printStackTrace();
    32         }
    33         
    34     }
    35     
    36     public void contextDestroyed(ServletContextEvent arg0)  { 
    37          
    38     }
    39 
    40 }

    9.

        

      

  • 相关阅读:
    SAP S/4HANA extensibility扩展原理介绍
    SAP CRM系统订单模型的设计与实现
    使用nodejs代码在SAP C4C里创建Individual customer
    SAP Cloud for Customer Account和individual customer的区别
    Let the Balloon Rise map一个数组
    How Many Tables 简单并查集
    Heap Operations 优先队列
    Arpa’s obvious problem and Mehrdad’s terrible solution 思维
    Passing the Message 单调栈两次
    The Suspects 并查集
  • 原文地址:https://www.cnblogs.com/juncaoit/p/7629286.html
Copyright © 2020-2023  润新知