使用uploadify上傳

效果圖:

效果圖

修改:

  1. 報找不到uploadify-cancel.png文件饶米。
    找到uploadify.css恒界,找到.uploadify-queue-item .cancel a {睦刃,修改文件的路徑。
  2. <div id="file_queue" style="width:400px;height:10px;position:absolute;z-index:999"></div>
    這里將file_queue對應(yīng)div的樣式設(shè)置成z-index:999十酣,主要是為了防止隊列表被其他的控件遮擋住眯勾。
  3. 好多人都說,在chrome婆誓、Firefox上使用uploadify的時候獲取不到session導(dǎo)致上傳出錯吃环。需要手工將session id方法附加參數(shù)中。但是我這里并沒有這么做洋幻,并且在chrome郁轻、Firefox上傳沒問題,不知道為什么文留,也許是因為我用的最新版的原因吧好唯。

要點:

  1. uploadify的js配置已經(jīng)比較全面,在實際使用的時候可以適當(dāng)?shù)膭h減一些方法和屬性燥翅。
  2. 一般情況下的單文件上傳只考慮onSelect骑篙、onUploadErroronUploadSuccess即可。
  3. 如果是多文件上傳森书,那么在單文件上傳的基礎(chǔ)上再加上對整個隊列的監(jiān)聽onQueueComplete靶端。
  4. 開始上傳所有文件:$('#file_upload').uploadify('upload', '*');
  5. 取消上傳:$('#file_upload').uploadify('cancel', parm);
  • parm為空:取消上傳第一個文件。
  • parm為'*':取消所有的上傳文件凛膏。
  • parm為file id:取消該file id對應(yīng)的文件杨名。
  1. 修改附加的一些變量:
    $('#file_upload').uploadify("settings","formData",{"name1":"中文name","parm1":"修改后的參數(shù)"});
    參數(shù)為json,如果該json中的某個變量已經(jīng)有了猖毫,那么覆蓋該屬性台谍,如果沒有,那么追加該屬性吁断。
  2. 獲取隊列中文件的個數(shù)(應(yīng)用場景趁蕊,譬如說我點擊上傳按鈕的時候,如果沒有選擇文件仔役,可以提示請至少選擇一個文件):
    var queueFils = $("#file_queue").children(".uploadify-queue-item");
    我的方法是讀取頁面上的html標(biāo)簽掷伙,很明顯這不是一個好的解決方案,但是沒有找到相應(yīng)功能的api骂因,誰知道這個怎么解決炎咖,請告知。
  3. 服務(wù)端設(shè)置編碼為:upload.setHeaderEncoding("UTF-8");寒波,這樣解析的文件名稱為正常中文乘盼。
    但是解析的附加變量中文亂碼,這里做一次轉(zhuǎn)碼(總感覺轉(zhuǎn)碼比較low俄烁,不知道是哪里配置的不對)绸栅。
    new String(item.getString().getBytes("iso8859-1"),"utf-8")
  4. 服務(wù)端最后返回文件保存路徑(這里可以隨便定義返回內(nèi)容)。

步驟:

  • 配置uploadify
<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<%String path = request.getContextPath();%>
<%String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <base href="<%=basePath %>">
    <title></title>
    <link rel="stylesheet" type="text/css" href="jquery-easyui-1.4.3/themes/default/easyui.css">
    <link rel="stylesheet" type="text/css" href="jquery-easyui-1.4.3/themes/icon.css">
    <script type="text/javascript" src="jquery-easyui-1.4.3/jquery.min.js"></script>
    <script type="text/javascript" src="jquery-easyui-1.4.3/jquery.easyui.min.js"></script>
    <script type="text/javascript" src="uploadify/uploadify/jquery.uploadify.min.js"></script>
    <link rel="stylesheet" type="text/css" href="uploadify/uploadify/uploadify.css" />
</head>
<script>
var fileUp;
$(function(){
    $(function() {
        $(function() {
        fileUp=$('#file_upload').uploadify({
                'uploader' : '<%=basePath%>/UploadServlet',//服務(wù)端地址
                'swf'      : 'uploadify/uploadify/uploadify.swf',
                'buttonImage' : 'uploadify/uploadify/img/chooseFile.jpg',//重載按鈕圖片
                'buttonClass' : 'some-class',//重載按鈕樣式
                'height':19,//按鈕寬度和高度
                'width':76,
                'queueID'  : 'file_queue',//顯示文件隊列的一個div页屠,在頁面定義
                'formData' : {'parm1':'參數(shù)1','year':'2016'},//附加參數(shù)粹胯,可以在upload參數(shù)中更改
                'buttonText':'選擇文件',//按鈕顯示文字,如果有圖片的話辰企,會被圖片擋住
                'fileSizeLimit':'1MB',//文件最大
                'auto':false,//自動提交
                'fileTypeExts' : '*.gif; *.jpg; *.png',//文件類型
                'fileTypeDesc' : '只能上傳圖片',//選擇文件的時候的提示信息
                'multi'    : true,//多選
                'queueSizeLimit' : 3,//隊列中文件的個數(shù)
                'onSelect' : function(file) {
                    console.log(file);
                    alert("選擇文件:" + file.name + "\n類型="+file.type+"\n大小="+file.size);
                    if(file.size>1024000){//文件太大风纠,取消上傳該文件
                        alert("文件大小超過限制!");
                        $('#file_upload').uploadify('cancel',file.id);
                    }
                },
                'onUploadSuccess' : function(file, data, response) {
                    alert('每個文件上傳成功后觸發(fā) ' + file.name + ' was successfully uploaded with a response of ' + response + ':' + data);
                },
                'onUploadComplete' : function(file) {
                    alert('每個文件上傳完成牢贸,無論對錯都觸發(fā)竹观! ' + file.name + ' finished processing.');
                },
                'onUploadError' : function(file, errorCode, errorMsg, errorString) {
                    alert('上傳出錯 ' + file.name + ' could not be uploaded: ' + errorString);
                },
                'onQueueComplete':function(queueData){
                    alert("隊列中的所有文件上傳完成后觸發(fā)。\n"+queueData.uploadsSuccessful+'\n'+queueData.uploadsErrored)
                },
            });
        });
    });
});
function upload(){
    $('#file_upload').uploadify("settings","formData",{"name1":"中文name","parm1":"修改后的參數(shù)"});
    $('#file_upload').uploadify('upload', '*');//上傳所有文件
}
function cancel(){
    $('#file_upload').uploadify('cancel', '*');//取消所有文件
}
function destroy(){
    alert("取消upload上傳潜索,變成原來樣式臭增!");
    $('#file_upload').uploadify('destroy');//destory
}
function getCount(){
    var queueFils = $("#file_queue").children(".uploadify-queue-item");
    alert("隊列中共有"+queueFils.length+"個文件!");
}
</script>
<body>
    <div class="easyui-panel" title="說明" style="margin-bottom:15px">
    </div>
    <div class="easyui-panel" style="text-align:center;margin-bottom:15px">
        <a href="javascript:void(0)" class="easyui-linkbutton" onclick="upload()">開始上傳</a>
        <a href="javascript:void(0)" class="easyui-linkbutton" onclick="cancel()">取消上傳</a>
        <a href="javascript:void(0)" class="easyui-linkbutton" onclick="destroy()">destroy</a>
        <a href="javascript:void(0)" class="easyui-linkbutton" onclick="getCount()">獲取上傳隊列中的文件個數(shù)</a>
        <input type="file" name="file_upload" id="file_upload" />
        <div id="file_queue" style="width:400px;height:10px;position:absolute;z-index:999"></div>
    </div>
</body>
</html>
  • 服務(wù)端
package com.servlet;

import java.io.File;
import java.io.IOException;
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.annotation.WebServlet;
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.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

/**
 * Servlet implementation class UploadServlet
 */
@WebServlet(name="UploadServlet",urlPatterns="/UploadServlet")
public class UploadServlet extends HttpServlet {
    private static final long serialVersionUID = -6483558339095298703L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public UploadServlet() {
        super();
        // TODO Auto-generated constructor  stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        response.getWriter().append("Served at: ").append(request.getContextPath());
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("獲取session竹习,可以根據(jù)這個session進行一些其他的判斷" + request.getSession().getId());
        SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMdd");
        String remotePath = File.separator + "download" + File.separator + sdf.format(new Date()) + File.separator;
        String savePath = remotePath;
        File dfile = new File(savePath);
        if (!dfile.exists()) {
            dfile.mkdirs();
        }
        DiskFileItemFactory fac = new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(fac);
        upload.setHeaderEncoding("UTF-8");
        List<FileItem> fileList = null;
        try {
            fileList = upload.parseRequest(request);
        } catch (FileUploadException ex) {
            return;
        }
    
        Iterator<FileItem> it = fileList.iterator();
        String name = "";
        String extName = "";
        while (it.hasNext()) {
            FileItem item = it.next();
            if (!item.isFormField()) {
                name = item.getName();
                long size = item.getSize();
                String type = item.getContentType();
                System.out.println("文件=" + name + " " + size + " " + type);
                if (name == null || name.trim().equals("")) {
                    continue;
                }
                // 擴展名格式:
                if (name.lastIndexOf(".") >= 0) {
                    extName = name.substring(name.lastIndexOf("."));
                }
                File file = null;
                do {
                    // 生成文件名:
                    name = UUID.randomUUID().toString();
                    file = new File(savePath + name + extName);
                } while (file.exists());
                File saveFile = new File(savePath + name + extName);
                try {
                    item.write(saveFile);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }else if(item.isFormField()){
                System.out.println("表單內(nèi)容:" + item.getFieldName() + "=" + new String(item.getString().getBytes("iso8859-1"),"utf-8"));
            }
        }
        String requestPath = remotePath + name + extName;
        request.getSession().setAttribute(requestPath, requestPath);
        response.getWriter().write(savePath + name + extName);
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末誊抛,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子整陌,更是在濱河造成了極大的恐慌拗窃,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泌辫,死亡現(xiàn)場離奇詭異并炮,居然都是意外死亡,警方通過查閱死者的電腦和手機甥郑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門逃魄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人澜搅,你說我怎么就攤上這事伍俘。” “怎么了勉躺?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵癌瘾,是天一觀的道長。 經(jīng)常有香客問我饵溅,道長妨退,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮咬荷,結(jié)果婚禮上冠句,老公的妹妹穿的比我還像新娘。我一直安慰自己幸乒,他們只是感情好懦底,可當(dāng)我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著罕扎,像睡著了一般聚唐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上腔召,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天杆查,我揣著相機與錄音,去河邊找鬼臀蛛。 笑死亲桦,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的掺栅。 我是一名探鬼主播烙肺,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼氧卧!你這毒婦竟也來了桃笙?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤沙绝,失蹤者是張志新(化名)和其女友劉穎搏明,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體闪檬,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡星著,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了粗悯。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片虚循。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖样傍,靈堂內(nèi)的尸體忽然破棺而出横缔,到底是詐尸還是另有隱情,我是刑警寧澤衫哥,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布茎刚,位于F島的核電站,受9級特大地震影響撤逢,放射性物質(zhì)發(fā)生泄漏膛锭。R本人自食惡果不足惜粮坞,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望初狰。 院中可真熱鬧莫杈,春花似錦、人聲如沸跷究。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽俊马。三九已至,卻和暖如春肩杈,著一層夾襖步出監(jiān)牢的瞬間柴我,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工扩然, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留艘儒,地道東北人。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓夫偶,卻偏偏與公主長得像界睁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子兵拢,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容