zoukankan      html  css  js  c++  java
  • servlet+jsp实现文件上传,和图片预览

    fileUpload.java

    /**

    *需要commons-fileupload-1.3.jar和commons-io-1.2.jar

    */

    public class fileUpload extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    request.setCharacterEncoding("utf-8"); // 设置编码
    String fName = "";
    String suffix = "";
    // 获得磁盘文件条目工厂
    DiskFileItemFactory factory = new DiskFileItemFactory();
    // 获取文件需要上传到的路径
    // String path = request.getRealPath("/upload1");//该方法已经被淘汰
    String path = this.getServletContext().getRealPath("/upload1");
    // String path = "c:/upload1";
    // 如果没以下两行设置的话,上传大的 文件 会占用 很多内存,
    // 设置暂时存放的 存储室 , 这个存储室,可以和 最终存储文件 的目录不同
    /**
    * 原理 它是先存到 暂时存储室,然后在真正写到 对应目录的硬盘上, 按理来说 当上传一个文件时,其实是上传了两份,第一个是以 .tem
    * 格式的 然后再将其真正写到 对应目录的硬盘上
    */
    factory.setRepository(new File(path));
    // 设置 缓存的大小,当上传文件的容量超过该缓存时,直接放到 暂时存储室
    factory.setSizeThreshold(1024 * 1024);
    // 高水平的API文件上传处理
    ServletFileUpload upload = new ServletFileUpload(factory);
    try {
    // 可以上传多个文件
    List<FileItem> list = (List<FileItem>) upload.parseRequest(request);
    for (FileItem item : list) {
    // 获取表单的属性名字
    String name = item.getFieldName();
    // 如果获取的 表单信息是普通的 文本 信息
    if (item.isFormField()) {
    // 获取用户具体输入的字符串 ,名字起得挺好,因为表单提交过来的是 字符串类型的
    String value = item.getString();
    request.setAttribute(name, value);
    } else {// 对传入的非 简单的字符串进行处理 ,比如说二进制的 图片,电影这些
    /**
    * 以下三步,主要获取 上传文件的名字
    */
    // 获取路径名
    String value = item.getName();
    // 索引到最后一个反斜杠
    int start = value.lastIndexOf("\");
    // 截取 上传文件的 字符串名字,加1是 去掉反斜杠,
    String filename = value.substring(start + 1);

    // 真正写到磁盘上
    // 它抛出的异常 用exception 捕捉
    // item.write( new File(path,filename) );//第三方提供的
    // 手动写入的
    // 如果有文件名
    if (filename.indexOf(".") >= 0) {
    // 就截取.之前的字符串
    int indexdot = filename.indexOf(".");

    suffix = filename.substring(indexdot);

    fName = filename
    .substring(0, filename.lastIndexOf("."));
    Date now = new Date();
    fName = fName + "_" + now.getTime();
    fName = fName + suffix;

    }
    OutputStream out = new FileOutputStream(new File(path,
    fName));
    request.setAttribute(name, fName);
    InputStream in = item.getInputStream();
    int length = 0;
    byte[] buf = new byte[1024];
    System.out.println("获取上传文件的总共的容量:" + item.getSize());
    // in.read(buf) 每次读到的数据存放在 buf 数组中
    while ((length = in.read(buf)) != -1) {
    // 在 buf 数组中 取出数据 写到 (输出流)磁盘上
    out.write(buf, 0, length);
    }
    in.close();
    out.close();
    }
    }
    } catch (FileUploadException e) {
    e.printStackTrace();
    } catch (Exception e) {
    e.printStackTrace();
    }
    request.getRequestDispatcher("filedemo.jsp").forward(request, response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    doGet(request, response);
    }

    }

    index.jsp

    /**

    *  需要jquery-3.1.1.min.js

    */

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>上传入口</title>
    <script src="./js/jquery-3.1.1.min.js"></script>
    </head>
    <body>
    <form action="fileUpload" enctype="multipart/form-data" method="post">
    用户名称:<input type="text" name="usename"> <br />
    上传图片:<input type="file" id="file0" name="file1"><br />
    <img src="" id="img0"><br/>
    <!-- 上传文件:<input type="file" name="file2"><br /> -->
    <input type="submit" value="提交" />
    </form>

    <script>
    $("#file0").change(function() {
    var objUrl = getObjectURL(this.files[0]);
    console.log("objUrl = " + objUrl);
    if (objUrl) {
    $("#img0").attr("src", objUrl);
    }
    });
    //建立一個可存取到該file的url
    function getObjectURL(file) {
    var url = null;
    if (window.createObjectURL != undefined) { // basic
    url = window.createObjectURL(file);
    } else if (window.URL != undefined) { // mozilla(firefox)
    url = window.URL.createObjectURL(file);
    } else if (window.webkitURL != undefined) { // webkit or chrome
    url = window.webkitURL.createObjectURL(file);
    }
    return url;
    }
    </script>
    </body>
    </html>

    filedemo.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>上传文件图片案列</title>
    </head>
    <body>
    用户名称:${requestScope.usename }<br />
    图片名称:${requestScope.file1 }<br />
    <%-- 文件名称:${requestScope.file2 }<br /> --%>
    <!-- 把上传的图片显示出来 -->
    <img alt="go" src="upload1/<%=(String) request.getAttribute("file1")%> " />
    </body>
    </html>

  • 相关阅读:
    iOS开发 日常错误积累
    Linux编程---I/O部分
    Binder机制1---Binder原理介绍
    hdu4405概率dp入门
    SSL连接建立过程分析(1)
    用GDB调试程序(一)
    RBAC权限管理
    HDU3930(离散对数与原根)
    Java实现 蓝桥杯VIP 算法提高 特殊的质数肋骨
    Java实现 蓝桥杯VIP 算法提高 产生数
  • 原文地址:https://www.cnblogs.com/daijun/p/6473659.html
Copyright © 2011-2022 走看看