Plugin - Plupload

Pluploadcss

引用html

<link href="~/Plupload/jquery.plupload.queue.css" rel="stylesheet" />
<script src="~/Scripts/jquery.min.js"></script>
<script src="~/Plupload/plupload.full.min.js"></script>
<script src="~/Plupload/jquery.plupload.queue.min.js"></script>

前端前端

<div id="html5_uploader" >Error.</div>
$("#html5_uploader").pluploadQueue({
        //用來指定上傳方式,指定多個上傳方式請使用逗號隔開。
        runtimes: 'html5',
        //觸發文件選擇對話框的DOM元素
        browse_button: 'btn-headup',
        //服務器端接收和處理上傳文件的腳本地址 
        url: "/Files/Uploader",
        //當值爲true時會爲每一個上傳的文件生成一個惟一的文件名
        unique_names: true,
        //是否能夠在文件瀏覽對話框中選擇多個文件
        multi_selection: true,
        //分片上傳文件時,每片文件被切割成的大小 當該值爲0時表示不使用分片上傳功能
        chunk_size: "1mb",
        //可使用該參數來限制上傳文件的類型,大小等
        filters: {
            //用來限定上傳文件的類型,爲一個數組
            mime_types: [ { title : "Image files", extensions : "jpg,gif,png" }],
            //用來限定上傳文件的大小
            max_file_size:'400kb',
            //是否限制選取重複的文件, true 爲不容許
            prevent_duplicates: true
        },
        //當發生plupload.HTTP_ERROR錯誤時的重試次數,爲0時表示不重試
        max_retries: 0,
        // 可使用該參數對將要上傳的圖片進行壓縮
        resize: {
            width: 100,
            height: 100,
            //是否裁剪圖片
            crop: true,
            //壓縮後圖片的質量
            quality: 60,
            //壓縮後是否保留圖片的元數據
            preserve_headers: false
        },
        //指定了使用拖拽方式來選擇上傳文件時的拖拽區域
        drop_element: "",
        //當Plupload初始化完成後觸發
        init: {
            // 每一個文件上傳完畢後引起的事件
            //uploader 爲當前的plupload實例對象
            //file 爲觸發此事件的文件對象
            //responseObject 爲服務器返回的信息對象
            FileUploaded: function (uploader,file,responseObject) {
                //response:服務器返回的文本
                responseObject.response;
                //responseHeaders:服務器返回的頭信息
                responseObject.responseHeaders;
                //status:服務器返回的http狀態碼,好比200
                responseObject.status;
            },
            //當使用文件小片上傳功能時,每個小片上傳完成後觸發
            //uploader 爲當前的plupload實例對象
            //file 爲觸發此事件的文件對象
            //responseObject 爲服務器返回的信息對象
            ChunkUploaded: function(uploader,file,responseObject){
                //offset:該文件小片在總體文件中的偏移量
                responseObject.offset;
                //response:服務器返回的文本
                responseObject.response;
                //responseHeaders:服務器返回的頭信息
                responseObject.responseHeaders;
                //status:服務器返回的http狀態碼,好比200
                responseObject.status;
                //total:該文件(指的是被切割成了許多文件小片的那個文件)的總大小,單位爲字節
                responseObject.total;
            },
            //全部文件上傳完畢後引起的事件, 
            //uploader 爲當前的plupload實例對象
            //files 爲一個數組,裏面的元素爲本次已完成上傳的全部文件對象
            UploadComplete: function (uploader, files) {
                $(".plupload_upload_status").hide();
                //繼續顯示文件上傳按鈕
                $(".plupload_buttons").show();
                // 使文件上傳的按鈕有效
                uploader.disableBrowse(false);
            },
            //當發生錯誤時觸發
            Error: function(uploader,errObject){
                //錯誤代碼,具體請參考plupload上定義的表示錯誤代碼的常量屬性
                errObject.code;
                //與該錯誤相關的文件對象
                errObject.file;
                //錯誤信息
                errObject.message;
            },
            //當調用destroy方法時觸發
            Destroy: function(uploader){

            }
        },
        //當Init事件發生後觸發
        PostInit: {}
    });

 

 

後臺html5

/// <summary>
/// 文件上傳的後臺方法
/// 可在後面加自定義參數集
/// </summary>
/// <param name="chunk"></param>
/// <returns></returns>
[HttpPost]
public ActionResult UploadFile(int? chunk, string name)
{
    var fileUpload = Request.Files[0];

    return Content("返回的內容自定義,如文件的url相對路徑,客服端抓取方法:FileUploaded的info.response", "text/plain");
}

 

其餘要點參考地址: http://www.cnblogs.com/2050/p/3913184.htmljquery

 

 

 

 

 

------------------------------ 一個圖片上傳器的集成 --------------------------------數組

<!-- 用於打開上傳框的按鈕, 能夠設置在頁面任何地方, id 不能重複 -->
<button id="pup-btn1" type="button">上傳入駐聯繫圖片</button>
<!-- 圖片上傳器的總容器 -->
<div class="pup-uploader">
    <!-- 用於實例化爲文件上傳器的 div 容器, plup-btn 指的是但願點擊哪一個按鈕來打開此實例 -->
    <div class="pup-main" plup-btn="pup-btn1" hidden></div>
    <!-- 上傳完圖片後將圖片顯示在此容器中 -->
    <div class="pup-image-box"></div>
    <!-- 上傳完圖片後 將圖片的地址存儲在此表單中, 用於提交 -->
    <input required class="pup-input" type="hidden" value="@Model.入駐聯繫圖片File" name="入駐聯繫圖片File"/>
</div>
/* *********************************
 @ 做者 : LakNeumann
 @ 最後修改時間: 2017-04-11
 @ 版本: 1.0
 ********************************* */

/* 
* 生成圖片容器
* @param {string} path 圖片所在的路徑, 用於預覽和生成到 input 上
*/
var _html = (path) =>
    "<div class='pup-image'>" +
        "<img src=" + path + ">" +
        "<div class='pup-remove k-icon k-i-delete'></div>" +
    "</div>";

$(function () {
    // 根據 input 的初始值來初始化 image-box
    $(".pup-input").each(function (index, ele) {
        var _i = $(this);
        var imgs = _i.val();
        // 若是 input 中有值
        if (imgs.length > 0) {
            // 多個 url 分隔符
            var ar = imgs.split("|");
            var _b = _i.siblings('.pup-image-box');
            // 防止 imagebox 變更引起 DOMSubtreeModified 事件
            // 利用變量先保存值, 而後一次性替換
            var _c = "";
            $.each(ar, function (index, value) {
                _c += _html(value);
            });
            // 一次性替換
            _b.append(_c);
        }
    })

    // 綁定圖片移除按鈕事件
    $(".pup-image-box").on("click", ".pup-remove", function () {
        var _o = $(this).parent();
        _o.remove();
    })

    // 圖片大容器中內容發生變更(添加圖片或刪除)事件
    // 將大容器中的全部圖片路徑, 生成到綁定的 input 中
    $(".pup-image-box").on('DOMSubtreeModified', function (e) {
        // pup-image-box 對象
        var $_that = $(this);
        // 找到綁定的 input
        var _i = $_that.siblings(".pup-input");
        var _content = ""
        // 獲取容器中全部圖片
        $_that.find('img').each(function (index, element) {
            // 多圖之間用 | 號來分割
            _content += (index == 0 ? "" : "|") + $(this).attr("src");
        });
        // 圖片路徑組生成到 input 中
        _i.val(_content).change();
    });
})

/*
* 初始化全部圖片上傳控件
*/
function initAllUploader() {
    $(".pup-main").each(function (index, element) {
        var obj = $(this);
        // 上傳圖片的按鈕
        var _b = obj.attr("plup-btn");
        // 是否多圖上傳
        var _m = obj.attr('plup-mutil') != undefined;
        // 實例化
        initUploader(obj, _b, _m);
    })
}

/*
* 將標籤實例化爲一個圖片的上傳器
* @param {object} 要實例化的dom對象
* @param {string} 打開文件上傳窗口的按鈕的Id
* @param {mutil}  是不是多圖上傳
*/
function initUploader(obj, btn, mutil) {
    obj.pluploadQueue({
        runtimes: 'html5',
        browse_button: btn,
        url: "/File/Uploader",
        // 惟一名命名
        unique_names: true,
        // 是否多圖上傳
        multi_selection: mutil,
        chunk_size: "1mb",
        filters: {
            mime_types: [{ title: "Image files", extensions: "jpg,gif,png" }],
            // 是否限制上傳重複圖片
            prevent_duplicates: false
        },
        // 最大重試次數
        max_retries: 0,
        init: {
            FilesAdded: function (uploader, files) {
                // 一加入文件就自動上傳
                uploader.start();
            },
            FileUploaded: function (uploader, file, responseObject) {
                // 獲取響應對象
                response = jQuery.parseJSON(responseObject.response);
                // 文件地址
                var _p = response.path;
                // image 大容器
                var _b = obj.parent().find('.pup-image-box');
                // 根據路徑生成 圖片
                var _c = _html(_p);
                // 若是是單圖上傳, 則使用替換
                // 若是是多圖上傳, 則附加在圖片容器後面
                mutil ? _b.append(_c) : _b.html(_c);
            },
            UploadComplete: function (uploader, files) {
                $(".plupload_upload_status").hide();
                $(".plupload_buttons").show();
                // 圖片傳送完成 能夠繼續上傳其餘圖片
                uploader.disableBrowse(false);
            },
            Error: function (uploader, errObject) {
            },
        },
    });
}

 

 

    var uploadPath = ServerHelper.GetWenzhangTitleImgPath();
    chunk = chunk ?? 0;

    using (var fs = new FileStream(Path.Combine(uploadPath, name), chunk == 0 ? FileMode.Create : FileMode.Append))
    {
        var buffer = new byte[fileUpload.InputStream.Length];
        fileUpload.InputStream.Read(buffer, 0, buffer.Length);
        fs.Write(buffer, 0, buffer.Length);
    }
    using (var db = new P2PDBContext())
    {
        var imgurl = db.WebInfos.FirstOrDefault().ServerImgUrl;
        return Content(imgurl + ServerHelper.GetWenzhangTitleImgWebLink(name), "text/plain");
    }
相關文章
相關標籤/搜索