1. 程式人生 > >jQuery + ajax + ashx實現無重新整理檔案上傳

jQuery + ajax + ashx實現無重新整理檔案上傳

主要分享的是jQuery + ajax的資料提交技巧,至於是不是.NET框架關係不大,大家可以用自己所用的框架處理上傳操作。

前臺介面程式碼:

<form id="form1" action="#" runat="server" enctype="multipart/form-data">
    
    <asp:FileUpload ID="FileUpload1" runat="server" />
    <a href="#" id="btnUpload" class="easyui-linkbutton" data-options="iconCls:'icon-add'">上傳檔案</a>

</form>

例子中用的是ASP.NET的 FileUpload 控制元件和easyui的 linkbutton 外掛,不過這些都不是必須的,大家按需使用即可,也可以是html的一般控制元件。反正都是一個檔案瀏覽框和一個上傳按鈕。

需要注意的是:

1、form標籤必不可少,不能只有檔案瀏覽控制元件和上傳按鈕,且標籤中 enctype="multipart/form-data" 必不可少。

2、檔案瀏覽控制元件如果是在客戶端執行,則必須指明name屬性。伺服器端執行可以不指出,如例子。

3、至於指定表單屬性後能不能正常獲取表單中的其他元素資訊,不在本文討論範圍,暫未嘗試。

利用jQuery + ajax提交表單:

<script>
        $(document).ready(function () {

            //單擊“上傳資料”按鈕
            $("#btnUpload").click(function () {

                var data = new FormData($("#form1")[0]);

                $.ajax({
                    type: "POST",
                    url: "OrderManage.ashx?action=uploadfile",
                    contentType: false,    //必須指定
                    processData: false,    //必須指定
                    data: data,
                    dataType: "text",
                    cache: false,
                    success: function (result) {
                        $.messager.alert("結果", result, "info");
                    }
                });
            })
        });
</script>

需要注意的是:

1、FormData方法有瀏覽器版本限制,具體資訊請自行查閱。不過一般來說主流瀏覽器都支援。

2、FormData方法中,引數[0]表示表單中第一個元素,需要和type="file"控制元件對應。

3、contentType: false, processData: false 這兩句必不可少否則無法實現此功能。

伺服器端一般處理檔案ashx執行上傳:

if (action == "uploadfile")
{
    HttpFileCollection files = context.Request.Files;
    string filePath = System.Web.HttpContext.Current.Server.MapPath("~/UploadFiles/");


    if (files.Count > 0){files[0].SaveAs(filePath + System.IO.Path.GetFileName(files[0].FileName));}

    context.Response.Write("上傳成功");
    context.Response.End();
}

需要注意的是:

1、filePath的值自行指定即可,但必須是物理路徑,例子中是上傳到網站根目錄下的UploadFiles資料夾內。

2、讀懂程式碼稍作修改即可實現批量上傳。