亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

jquery uploadify和apache Fileupload實現異步上傳文件示例

2019-11-26 15:30:33
字體:
來源:轉載
供稿:網友

jQuery Uploadify + Apache Fileupload異步上傳文件示例
1、可以限制上傳文件大小和類型,理論上任何類型的文件都可以上傳(自己根據api配置即可);
2、后臺使用Apache commons-fileupload-1.3.1.jar作為上傳工具包,本示例支持一次性多文件上傳;
3、文件上傳目錄可以任意指定,請在web.xml中配置;
Uploadify api 詳見http://www.uploadify.com/documentation/

FileUploadServlet

復制代碼 代碼如下:

package com.xiaoxing.upload;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

/**
 * <h1>Apache Fileupload文件上傳(2014-5-3)</h1>
 * <p>1、如果你對本示例感興趣并想了解更多,歡迎加入Java私塾在線學習社區(329232140)</p>
 * <p>2、針對這個例子小修小改便可移植到你的實際項目中。</p>
 */
public class FileUploadServlet extends HttpServlet {

    private static final long serialVersionUID = 7579265950932321867L;

    // 設置文件默認上傳目錄(如果你沒有在web.xml中配置的話)
    private String uploadDir = "c:/"; // 文件上傳目錄
    private String tempUploadDir = "c:/"; // 文件臨時存放目錄(會話銷毀后由監聽器自動刪除)

    /*
     * (non-Javadoc)
     * @see javax.servlet.GenericServlet#init()
     * 如果在web.xml中配置了文件上傳目錄則優先使用,判斷文件目錄是否存在,不存在就創建。
     */
    @Override
    public void init() throws ServletException {
        // 獲取本項目所在真實硬盤目錄
        String path = getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
        path = path.substring(0, path.indexOf("WEB-INF"));
        // 判斷目標是否存在,不存在就建立
        String uploadDir = path.concat(this.getInitParameter("uploadDir"));
        String tempUploadDir = path.concat(this.getInitParameter("tempUploadDir"));
        File f_uploadDir = new File(uploadDir);
        File f_tempUploadDir = new File(tempUploadDir);
        if (!f_uploadDir.exists()) {
            f_uploadDir.mkdirs();
        }
        if (!f_tempUploadDir.exists()) {
            f_tempUploadDir.mkdirs();
        }
        // 給變量賦值
        this.uploadDir = uploadDir;
        this.tempUploadDir = tempUploadDir;
    }

    /*
     * (non-Javadoc)
     * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
     * 不接收get方式提交的數據,返回上傳失敗狀態碼。
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.setResponse(response);
        PrintWriter out = response.getWriter();
        out.print("{/"error/":/"-1/""); // 非法提交方式
    }

    /*
     * (non-Javadoc)
     * @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
     * 上傳文件請求都是通常POST提交
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.setResponse(response); // 設置響應類型,以便前端解析
        PrintWriter out = response.getWriter();
        String result = "";
        try {
            // 檢查本次是否一個文件上傳請求
            boolean isMultipart = ServletFileUpload.isMultipartContent(request);
            if (isMultipart) {
                DiskFileItemFactory factory = new DiskFileItemFactory(); // 創建一個工廠基于磁盤的文件項
                factory.setRepository(new File(tempUploadDir)); // 配置儲存庫(確保安全的臨時位置時)
                ServletFileUpload upload = new ServletFileUpload(factory); // 創建一個新的文件上傳處理程序
                upload.setSizeMax(1024 * 1024 * 100); // 設置總體要求尺寸限制(建議前后臺分別設置,因為前后臺用到了不同的插件)
                List<FileItem> items = upload.parseRequest(request); // 解析請求
                Iterator<FileItem> iter = items.iterator(); // 處理上傳的項目
                while (iter.hasNext()) { //如果是一次性上傳多個文件,那這里會分別去保存
                    FileItem item = iter.next();
                    if (!item.isFormField()) { // 過濾表單里的非文件類型字段
                        if (!"".equals(item.getName())) { // 過濾非文件類型的input
                            String s_name = item.getName(); // 獲得原始文件名
                            int position = s_name.lastIndexOf(".");
                            String s_fileType = s_name.substring(position, s_name.length()); // 獲得文件后綴
                            String date = new SimpleDateFormat("yyyyMMdd").format(new Date());
                            String s = uploadDir.concat("/").concat(date).concat("/");
                            //這里按日期分目錄保存文件
                            File sf = new File(s);
                            if (!sf.exists()) {
                                sf.mkdirs();
                            }
                            String s_filePath = s.concat(UUID.randomUUID().toString()).concat(s_fileType);
                            File path = new File(s_filePath);
                            item.write(path);
                            result += s_filePath.concat(",");
                        } else {
                            result = "";
                            break;
                        }
                    }
                }
            } else {
                result = "";
            }
            String s_resultJSON = this.jointJSON(result); // 拼接返回前端JSON
            out.print(s_resultJSON);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            out.flush();
            out.close();
        }
    }

    /**
     * 拼接JSON,將保存文件的文件名和日期目錄返回給前端(前端可能需要這個路徑完成其他表單操作,比如將文件路徑存放到數據庫)
     * @param result JSON格式的字符串
     * @return
     * @throws UnsupportedEncodingException
     */
    private String jointJSON (String result) throws UnsupportedEncodingException {
        String str = "";
        if(!"".equals(result)) {
            String rs[] = result.split(",");
            StringBuffer buffer = new StringBuffer("{/"rows/":[");
            for (int i = 0; i < rs.length; i++) {
                String s_tmpName = rs[i];
                s_tmpName = s_tmpName.substring(uploadDir.length(), s_tmpName.length());
                buffer.append("{/"name/":/"").append(s_tmpName).append("/"},");
            }
            str = buffer.toString();
            str = str.substring(0, str.length() - 1).concat("]}");
        } else {
            str = "{/"error/":/"-2/""; //上傳失敗
        }
        return str;
    }

    /**
     * 設置響應類型ContentType為"application/x-json"
     * @param response
     */
    private void setResponse(HttpServletResponse response) {
        response.setCharacterEncoding("UTF-8");
        response.setContentType("application/json;charset=UTF-8");
        response.setHeader("cache-control", "no-cache");
    }

}

test_upload.html

復制代碼 代碼如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jQuery Uploadify + Apache Fileupload異步上傳文件示例(2014-5-3)</title>
<link rel="stylesheet" type="text/css" href="/js/uploadify/uploadify.css">
<script src="/js/jquery-1.9.0.js"></script>
<script src="/js/uploadify/jquery.uploadify.min.js"></script>
<script type="text/javascript">
$(function() {
 $('#fileupload').uploadify({
     'method'   : 'post',
     'buttonText' : 'flash上傳文件',
     'fileSizeLimit' : '1024KB',
     'fileTypeExts' : '*.gif; *.jpg; *.png',
  'swf'      : '/js/uploadify/uploadify.swf',
  'uploader' : '/upload', //這是上傳圖片的路徑,也就是我在web.xml里配置的servlet
  'onUploadSuccess' : function(file, data, response) { //圖片上傳成功后返回數據在這里處理
      var ary = eval("(" + data + ")").rows;
      for(var i = 0; i < ary.length; i++) {
          $("#J_div").append("<img alt='圖片' src='/upload/images" + ary[i].name + "' width='200px' height='200px'>");
      }
     }
 });
});
</script>
</head>
<body>
 <h2>jQuery Uploadify + Apache Fileupload異步上傳文件示例(2014-5-3)</h2>
 <p>1、可以限制上傳文件大小和類型,理論上任何類型的文件都可以上傳(自己根據api配置即可);</p>
 <p>2、后臺使用Apache commons-fileupload-1.3.1.jar作為上傳工具包,本示例支持一次性多文件上傳;</p>
 <p>3、文件上傳目錄可以任意指定,請在web.xml中配置;</p>
 <p>4、對于已經上傳的圖片沒有查詢到這個頁面上,這部分留給你去做吧。</p>
 <p>Uploadify api 詳見http://www.uploadify.com/documentation/</p>
 <p style="color: red">*如果你對本示例感興趣并想了解更多,歡迎加入Java私塾在線學習社區(329232140)。</p>
 <input id="fileupload" type="file" name="img" multiple="multiple"/>
 <div id="J_div"></div>
</body>
</html>

web.xml

復制代碼 代碼如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" metadata-complete="true" version="3.0">
  <welcome-file-list>
   <welcome-file>test_upload.html</welcome-file>
  </welcome-file-list>

  <servlet>
    <description>專門用來處理上傳操作的servlet</description>
        <servlet-name>FileUploadServlet</servlet-name>
        <servlet-class>com.xiaoxing.upload.FileUploadServlet</servlet-class>
        <init-param>
         <description>文件存放的正式目錄,可以自己配置</description>
         <param-name>uploadDir</param-name>
         <param-value>/upload/images/</param-value>
        </init-param>
        <init-param>
         <description>文件存放的臨時目錄,可以自己配置,里的文件由下面配置的監聽器自動刪除。</description>
         <param-name>tempUploadDir</param-name>
         <param-value>/upload/temp</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>FileUploadServlet</servlet-name>
        <url-pattern>/upload</url-pattern>
    </servlet-mapping>

    <listener>
     <description>臨時文件資源清理,工具包自帶,不用我們來寫</description>
     <listener-class>org.apache.commons.fileupload.servlet.FileCleanerCleanup</listener-class>
   </listener>

</web-app>

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久综合伊人77777蜜臀| 国产欧美精品在线| 日韩中文字幕网| 亚洲精品国产精品自产a区红杏吧| 久久久女人电视剧免费播放下载| 国产欧美日韩综合精品| 欧美日韩一区二区三区在线免费观看| 精品色蜜蜜精品视频在线观看| 久久精品中文字幕免费mv| 秋霞成人午夜鲁丝一区二区三区| 亚洲男人天天操| 亚洲色图偷窥自拍| 91国内精品久久| 亚洲区中文字幕| 91美女片黄在线观| 欧美高清视频在线| 亚洲人午夜精品免费| 亚洲欧美日韩高清| 清纯唯美亚洲激情| 欧美理论在线观看| 奇米一区二区三区四区久久| 欧美黑人巨大精品一区二区| 亚洲天堂av综合网| 亚洲日韩中文字幕在线播放| 亚洲色图15p| 国产精品久久久亚洲| 亚洲美女精品成人在线视频| 国产欧美 在线欧美| 国产一区二区黑人欧美xxxx| 欧美片一区二区三区| 亚洲精品国产suv| 国产精品av电影| 18性欧美xxxⅹ性满足| 国产精品69精品一区二区三区| 久久久久亚洲精品国产| 国内精品国产三级国产在线专| 国产成人精品免费久久久久| 中文字幕亚洲一区| 欧美成人免费小视频| 国产成人精品免高潮费视频| 影音先锋日韩有码| 久久久免费在线观看| 国产精品美女久久久久久免费| 亚洲激情 国产| 国产剧情久久久久久| 亚洲高清不卡av| 欧美性色xo影院| 久久精品视频导航| 精品久久久久久久久中文字幕| 日韩欧美在线视频免费观看| 丝袜亚洲欧美日韩综合| 日韩在线www| 成人国产精品一区二区| 色偷偷噜噜噜亚洲男人的天堂| 伊人伊成久久人综合网站| 亚洲free嫩bbb| 亚洲图片制服诱惑| 欧美超级免费视 在线| 亚洲欧美日韩国产精品| 久久精品欧美视频| 中日韩午夜理伦电影免费| 久久久国产在线视频| 高跟丝袜一区二区三区| 欧美精品免费在线观看| www.午夜精品| 日韩免费在线视频| 欧美电影院免费观看| 欧美激情图片区| 欲色天天网综合久久| 国产精品香蕉在线观看| 久久天天躁狠狠躁夜夜躁| 97在线看免费观看视频在线观看| 色吧影院999| 国产伦精品免费视频| 欧美激情视频免费观看| 成人a视频在线观看| 国产精品久久久久久久久久小说| 97色伦亚洲国产| 欧美大片va欧美在线播放| 精品国产乱码久久久久久天美| 精品久久久91| 日韩欧美高清视频| 欧美大片在线影院| 亚洲欧洲中文天堂| 国产美女被下药99| 一区二区三区四区在线观看视频| 国产精品免费在线免费| 欧美国产精品va在线观看| 国产精品永久免费在线| 久久伊人精品一区二区三区| 91精品久久久久久久久中文字幕| 成人a免费视频| 疯狂做受xxxx欧美肥白少妇| 欧美福利视频网站| 成人中文字幕在线观看| 国产成人精品久久二区二区| 成人有码视频在线播放| 三级精品视频久久久久| 国产精品a久久久久久| 国产日韩av在线播放| 国产精品久久久久久久久久久新郎| 欧美日韩成人在线视频| 国产精品美女免费| 成人在线免费观看视视频| 欧美成人免费在线视频| 国产精品嫩草影院久久久| 亚洲国产精品久久久久秋霞不卡| 亚洲人成电影在线播放| 成人免费大片黄在线播放| 国产精品视频一区二区高潮| 精品久久久久久中文字幕一区奶水| 九九热精品视频在线播放| 清纯唯美亚洲综合| 欧美精品videosex极品1| 亚洲黄色在线看| 国产日韩中文字幕| www.久久色.com| 亚洲影院色在线观看免费| 久久国产色av| 日韩免费看的电影电视剧大全| 国产一区二区三区免费视频| 伊人久久五月天| 美日韩精品免费观看视频| 日韩国产中文字幕| 日本不卡高字幕在线2019| 日韩一级黄色av| 国产精品久久久久9999| 国产午夜精品视频免费不卡69堂| 精品国内亚洲在观看18黄| 91精品国产色综合久久不卡98| 最新的欧美黄色| 欧美大胆在线视频| 国内精品美女av在线播放| 91国产美女视频| 成人国产精品日本在线| 国产精品一区久久| 少妇av一区二区三区| 国产精品成久久久久三级| 911国产网站尤物在线观看| 日韩在线视频国产| 这里只有精品在线观看| 亚洲自拍偷拍网址| 91亚洲人电影| 在线播放亚洲激情| 精品久久久久久久久久ntr影视| 欧美性开放视频| 上原亚衣av一区二区三区| 久久精品视频在线观看| 91视频-88av| 欧美日韩在线观看视频| 日韩成人在线电影网| 亚洲精品久久久久久久久| 狠狠做深爱婷婷久久综合一区| 91精品国产91久久久久久不卡| 国产精品88a∨| 亚洲在线视频福利| 欧美大片第1页| 日本91av在线播放| 91视频免费在线| 伦理中文字幕亚洲| 国产精品久久久久久久电影| 在线日韩精品视频| 欧美精品成人91久久久久久久| 日韩av大片在线|