JavaWeb之jsp文件的上传与下载

一、jsp文件上传与下载:

  1、文件上传应用场景:添加附件(如邮件附件等);图片、视屏、音乐等。

  2、文件上传组件:Smartupload(不成熟,不稳定)、fileupload。

  3、fileupload文件上传原理图:

JavaWeb之jsp文件的上传与下载_第1张图片

4、如何上传一个文件:

 (1)引入fileupload包;

 (2)编写html页面,注意表单属性;

 (3)编写文件上传处理jsp。

 (4)文件上传常用参数:SizeMax:设置文件上传最大字节数(单位:字节)

                                                      Upload.setSizeMax(4*1024*1024);//4M

5、表单文件上传弊端:文件上传服务器端无法判断大小;上传时无法显示上传进度。

6、文件上传安全漏洞防范:通过限制上传文件的后缀名(类似.jsp,.jspx,.JSP,大小写字母等),限制后缀名注意事项。

eg:文件上传:

 (1)上传表单:

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2018/4/5
  Time: 17:17
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
 <%    
    String realpath=session.getServletContext().getRealPath("");
%>
  
    
$Title$  
  

   

<%=realpath%>

(2)upload.jsp:

<%@ page import="org.apache.commons.fileupload.disk.DiskFileItemFactory" %>
<%@ page import="org.apache.commons.fileupload.servlet.ServletFileUpload" %>
<%@ page import="java.util.List" %>
<%@ page import="org.apache.commons.fileupload.FileItem" %>
<%@ page import="java.io.FileOutputStream" %>
<%@ page import="java.io.File" %>
<%@ page import="org.apache.commons.io.IOUtils" %>
<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2018/4/6
  Time: 16:11
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    request.setCharacterEncoding("UTF-8");
    response.setCharacterEncoding("Utf-8");
    DiskFileItemFactory factory=new DiskFileItemFactory();
    factory.setSizeThreshold(8*1024);//设置缓冲区大小
    //定义upload组件
    ServletFileUpload upload=new ServletFileUpload(factory);
    upload.setSizeMax(1024*1024*40);//设置文件大小
    List items = upload.parseRequest(request);
    String filename="";
    String realpath="";
    for(FileItem item:items){
        if(!item.isFormField()){
            realpath=session.getServletContext().getRealPath("");
            FileOutputStream os=new FileOutputStream(realpath+ File.separator+item.getName());
            filename=item.getName();
            IOUtils.copy(item.getInputStream(),os);
            os.flush();
            os.close();
        }
        System.out.println(item.getFieldName());
    }
%>

<%=realpath%>

<%=filename%>

(3)同(1)Ajax+html5文件上传(使用formData对象接受表单):

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2018/4/6
  Time: 17:13
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title
    
    



  

你可能感兴趣的:(Web)