最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

jquery uploadify和apache Fileupload實(shí)現(xiàn)異步上傳文件示例

 更新時(shí)間:2014年05月04日 09:32:18   作者:  
這篇文章主要介紹了jquery uploadify和apache Fileupload實(shí)現(xiàn)異步上傳文件示例,需要的朋友可以參考下

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

FileUploadServlet

復(fù)制代碼 代碼如下:

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、如果你對(duì)本示例感興趣并想了解更多,歡迎加入Java私塾在線學(xué)習(xí)社區(qū)(329232140)</p>
 * <p>2、針對(duì)這個(gè)例子小修小改便可移植到你的實(shí)際項(xiàng)目中。</p>
 */
public class FileUploadServlet extends HttpServlet {

    private static final long serialVersionUID = 7579265950932321867L;

    // 設(shè)置文件默認(rèn)上傳目錄(如果你沒(méi)有在web.xml中配置的話(huà))
    private String uploadDir = "c:/"; // 文件上傳目錄
    private String tempUploadDir = "c:/"; // 文件臨時(shí)存放目錄(會(huì)話(huà)銷(xiāo)毀后由監(jiān)聽(tīng)器自動(dòng)刪除)

    /*
     * (non-Javadoc)
     * @see javax.servlet.GenericServlet#init()
     * 如果在web.xml中配置了文件上傳目錄則優(yōu)先使用,判斷文件目錄是否存在,不存在就創(chuàng)建。
     */
    @Override
    public void init() throws ServletException {
        // 獲取本項(xiàng)目所在真實(shí)硬盤(pán)目錄
        String path = getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
        path = path.substring(0, path.indexOf("WEB-INF"));
        // 判斷目標(biāo)是否存在,不存在就建立
        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方式提交的數(shù)據(jù),返回上傳失敗狀態(tài)碼。
     */
    @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)
     * 上傳文件請(qǐng)求都是通常POST提交
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.setResponse(response); // 設(shè)置響應(yīng)類(lèi)型,以便前端解析
        PrintWriter out = response.getWriter();
        String result = "";
        try {
            // 檢查本次是否一個(gè)文件上傳請(qǐng)求
            boolean isMultipart = ServletFileUpload.isMultipartContent(request);
            if (isMultipart) {
                DiskFileItemFactory factory = new DiskFileItemFactory(); // 創(chuàng)建一個(gè)工廠基于磁盤(pán)的文件項(xiàng)
                factory.setRepository(new File(tempUploadDir)); // 配置儲(chǔ)存庫(kù)(確保安全的臨時(shí)位置時(shí))
                ServletFileUpload upload = new ServletFileUpload(factory); // 創(chuàng)建一個(gè)新的文件上傳處理程序
                upload.setSizeMax(1024 * 1024 * 100); // 設(shè)置總體要求尺寸限制(建議前后臺(tái)分別設(shè)置,因?yàn)榍昂笈_(tái)用到了不同的插件)
                List<FileItem> items = upload.parseRequest(request); // 解析請(qǐng)求
                Iterator<FileItem> iter = items.iterator(); // 處理上傳的項(xiàng)目
                while (iter.hasNext()) { //如果是一次性上傳多個(gè)文件,那這里會(huì)分別去保存
                    FileItem item = iter.next();
                    if (!item.isFormField()) { // 過(guò)濾表單里的非文件類(lèi)型字段
                        if (!"".equals(item.getName())) { // 過(guò)濾非文件類(lèi)型的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,將保存文件的文件名和日期目錄返回給前端(前端可能需要這個(gè)路徑完成其他表單操作,比如將文件路徑存放到數(shù)據(jù)庫(kù))
     * @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;
    }

    /**
     * 設(shè)置響應(yīng)類(lèi)型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

復(fù)制代碼 代碼如下:

<!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) { //圖片上傳成功后返回?cái)?shù)據(jù)在這里處理
      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、可以限制上傳文件大小和類(lèi)型,理論上任何類(lèi)型的文件都可以上傳(自己根據(jù)api配置即可);</p>
 <p>2、后臺(tái)使用Apache commons-fileupload-1.3.1.jar作為上傳工具包,本示例支持一次性多文件上傳;</p>
 <p>3、文件上傳目錄可以任意指定,請(qǐng)?jiān)趙eb.xml中配置;</p>
 <p>4、對(duì)于已經(jīng)上傳的圖片沒(méi)有查詢(xún)到這個(gè)頁(yè)面上,這部分留給你去做吧。</p>
 <p>Uploadify api 詳見(jiàn)http://www.uploadify.com/documentation/</p>
 <p style="color: red">*如果你對(duì)本示例感興趣并想了解更多,歡迎加入Java私塾在線學(xué)習(xí)社區(qū)(329232140)。</p>
 <input id="fileupload" type="file" name="img" multiple="multiple"/>
 <div id="J_div"></div>
</body>
</html>

web.xml

復(fù)制代碼 代碼如下:

<?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>專(zhuān)門(mén)用來(lái)處理上傳操作的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>文件存放的臨時(shí)目錄,可以自己配置,里的文件由下面配置的監(jiān)聽(tīng)器自動(dòng)刪除。</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>臨時(shí)文件資源清理,工具包自帶,不用我們來(lái)寫(xiě)</description>
     <listener-class>org.apache.commons.fileupload.servlet.FileCleanerCleanup</listener-class>
   </listener>

</web-app>

相關(guān)文章

  • Java語(yǔ)言實(shí)現(xiàn)Blowfish加密算法完整代碼分享

    Java語(yǔ)言實(shí)現(xiàn)Blowfish加密算法完整代碼分享

    這篇文章主要介紹了Java語(yǔ)言實(shí)現(xiàn)Blowfish加密算法完整代碼分享,簡(jiǎn)單介紹了blowfish加密算法,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-11-11
  • java中Optional的使用詳細(xì)解析

    java中Optional的使用詳細(xì)解析

    這篇文章主要介紹了java新特性之Optional的詳細(xì)解析,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • javaweb上傳下載實(shí)例完整版解析(下)

    javaweb上傳下載實(shí)例完整版解析(下)

    這篇文章主要為大家詳細(xì)解析了javaweb上傳下載實(shí)例,本文重點(diǎn)在于文件下載功能的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • 詳解Spring Boot 2.0.2+Ajax解決跨域請(qǐng)求的問(wèn)題

    詳解Spring Boot 2.0.2+Ajax解決跨域請(qǐng)求的問(wèn)題

    這篇文章主要介紹了詳解Spring Boot 2.0.2+Ajax解決跨域請(qǐng)求的問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 巧用Spring中的@Order進(jìn)行排序

    巧用Spring中的@Order進(jìn)行排序

    這篇文章主要介紹了巧用Spring中的@Order進(jìn)行排序,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Java異或運(yùn)算應(yīng)用場(chǎng)景詳解

    Java異或運(yùn)算應(yīng)用場(chǎng)景詳解

    這篇文章主要給大家介紹了關(guān)于Java異或運(yùn)算應(yīng)用場(chǎng)景的相關(guān)資料,異或運(yùn)算會(huì)應(yīng)用在很多算法題中,這里整理了幾個(gè)最常見(jiàn)的應(yīng)用場(chǎng)景,文中通過(guò)代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • IDEA中如何正確快速打jar包的方式

    IDEA中如何正確快速打jar包的方式

    這篇文章主要介紹了IDEA中如何正確快速打jar包,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • SpringBoot 入門(mén)教程之引入數(shù)據(jù)傳輸層的方法

    SpringBoot 入門(mén)教程之引入數(shù)據(jù)傳輸層的方法

    這篇文章主要介紹了SpringBoot 入門(mén)教程之引入數(shù)據(jù)傳輸層的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • java調(diào)用中國(guó)天氣網(wǎng)api獲得天氣預(yù)報(bào)信息的方法

    java調(diào)用中國(guó)天氣網(wǎng)api獲得天氣預(yù)報(bào)信息的方法

    這篇文章主要介紹了java調(diào)用中國(guó)天氣網(wǎng)api獲得天氣預(yù)報(bào)信息的方法,可實(shí)現(xiàn)調(diào)用溫度、風(fēng)力風(fēng)向及近期天氣狀況等功能,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • C/C++和Java的交互詳解

    C/C++和Java的交互詳解

    本文旨在簡(jiǎn)單的介紹一下如何讓java層和C/C++層相互調(diào)用,這里主要是使用了JNI技術(shù),并沒(méi)有深究其原理,只是做了個(gè)實(shí)現(xiàn),其目的是為后面的學(xué)習(xí)打開(kāi)一扇窗。
    2016-01-01

最新評(píng)論

锡林郭勒盟| 正蓝旗| 佛学| 扎赉特旗| 霞浦县| 泽普县| 恩平市| 德化县| 西畴县| 靖江市| 黄平县| 神木县| 汾阳市| 四子王旗| 乌鲁木齐县| 镇雄县| 铜陵市| 南木林县| 平舆县| 惠东县| 武穴市| 泽普县| 会泽县| 津市市| 宁津县| 姜堰市| 秦皇岛市| 奇台县| 灵石县| 巫溪县| 梨树县| 离岛区| 秭归县| 阿鲁科尔沁旗| 南部县| 武义县| 鹿泉市| 马龙县| 巴林左旗| 全南县| 宿迁市|