Ajax AsyncFileUpload多次上传控件上传文件

时间:2012-01-01 18:21:30

标签: c# asp.net asp.net-ajax c#-3.0 asyncfileupload

到目前为止,我一直在尝试对这个问题进行整理,但我没有运气。我有一个Web窗体,它有一些asp.net窗体控件和两个AsyncFileUpload控件。当我使用第一个AsyncFileUpload1上传图像时,它只上传一个图像,当我使用AsyncFileUpload2上传第二个图像时,它会上传同一图像的两个版本。

当我点击“保存”按钮保存数据时,事情变得疯狂,然后在6次或更多时间内总共上传3个版本的图像。我尝试了不同的方式,最终放弃了。

HTML FILE中的示例代码

     <script type = "text/javascript">
         function uploadComplete(sender) {
             // $get("<%=lblImageUploadMessage1.ClientID%>").innerHTML = "File Uploaded Successfully";
             // $get("<%=lblImageUploadMessage2.ClientID%>").innerHTML = "File Uploaded Successfully";
             clearContents();
             clearContents2();

         }
         function uploadError(sender) {
             // $get("<%=lblImageUploadMessage1.ClientID%>").innerHTML = "File upload failed. only Image files are allowed";
             // $get("<%=lblImageUploadMessage2.ClientID%>").innerHTML = "File upload failed. only Image files are allowed";
             clearContents();
         }
</script>
<script type = "text/javascript">
    function clearContents() {
        var span = $get("<%=AsyncFileUpload1.ClientID%>");
        var txts = span.getElementsByTagName("input");
        for (var i = 0; i < txts.length; i++) {
            if (txts[i].type == "text") {
                txts[i].value = "";
            }
        }
    }
    function clearContents2() {
        var span = $get("<%=AsyncFileUpload2.ClientID%>");
        var txts = span.getElementsByTagName("input");
        for (var i = 0; i < txts.length; i++) {
            if (txts[i].type == "text") {
                txts[i].value = "";
            }
        }
    }

    window.onload = clearContents;
</script>   

       <div class="row">
            <asp:Label ID="lblPageTitleE" CssClass="txtLabel" runat="server" Text="Page Title (E) :"></asp:Label>
            <asp:TextBox ID="txtPageTitleE" runat="server" CssClass="txtbox700"></asp:TextBox>
            <asp:RequiredFieldValidator ID="RFVPageTitleE" runat="server" ErrorMessage="*" 
                ControlToValidate="txtPageTitleE" ValidationGroup="atpAddNewPage"  CssClass="validation"></asp:RequiredFieldValidator>
       </div>
       <div class="row">
            <asp:Label ID="lblPageTitleA" CssClass="txtLabel" runat="server" Text="Page Title (A) :"></asp:Label>
            <asp:TextBox ID="txtPageTitleA" runat="server" CssClass="txtbox700"></asp:TextBox>
            <asp:RequiredFieldValidator ID="RFVPageTitleA" runat="server" ErrorMessage="*" 
                ControlToValidate="txtPageTitleA" ValidationGroup="atpAddNewPage"  CssClass="validation"></asp:RequiredFieldValidator>
       </div>

  <!-- Image Control --> 
           <div class="row">
                <asp:Label ID="lblBannerImageE" CssClass="txtLabel" runat="server" Text="Banner Image (E) :"></asp:Label>
    <asp:AsyncFileUpload  OnClientUploadError="uploadError" OnClientUploadComplete="uploadComplete"
    runat="server" ID="AsyncFileUpload1"  UploaderStyle="Modern" CompleteBackColor="White"
    UploadingBackColor="#336699" ThrobberID="imgLoader" OnUploadedComplete="AsyncFileUpload1_UploadedComplete" CssClass="AFU2" Width="400px" />

                <asp:Label ID="lblImageUploadMessage1" CssClass="imgLabel" runat="server" Text=""></asp:Label>
                <asp:Image ID="imgLoader" runat="server" ImageUrl="~/images/ajax-loader-small.gif" />
           </div>
           <div class="row">
                <asp:Label ID="lblBannerImageA" CssClass="txtLabel" runat="server" Text="Banner Image (A) :"></asp:Label>
                <asp:AsyncFileUpload  OnClientUploadError="uploadError" OnClientUploadComplete="uploadComplete"
                runat="server" ID="AsyncFileUpload2"  UploaderStyle="Modern" CompleteBackColor="White"
                UploadingBackColor="#336699" ThrobberID="imgLoader2" OnUploadedComplete="AsyncFileUpload2_UploadedComplete" CssClass="AFU2" Width="400px" />
                <asp:Label ID="lblImageUploadMessage2" CssClass="imgLabel" runat="server" Text=""></asp:Label>
                <asp:Image ID="imgLoader2" runat="server" ImageUrl="~/images/ajax-loader-small.gif" />
           </div>
  <!-- Image Control --> 

以下是.CS文件的示例代码

在这个文件中,我使用GUID和图像上传分配每个图像的唯一名称AsyncFileUpload代码多次执行,我现在无法弄清楚我是如此困惑。

public partial class _Default : System.Web.UI.Page
{
    String BannerImageNameEn, BannerImageNameAr;



    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            //Session["BannerImageNameEn"] = "Null";
            //Session["BannerImageNameEn"] = "Null";
        }

    }

    protected void btnCreatePage_Click(object sender, EventArgs e)
    {
        BusinessLogic objBLAddNewPage = new BusinessLogic();

        Pages objPages = new Pages();

        objPages.PageNameEn = txtPageNameE.Text;
        objPages.PageNameAr = txtPageNameA.Text;
        objPages.PageTitleEn = txtPageTitleE.Text;
        objPages.PageTitleAr = txtPageTitleA.Text;
        objPages.PageDescEn = txtPageDescE.Text;
        objPages.PageDescAr = txtPageDescA.Text;
        objPages.PageKeywordEn = txtPageKeywordsE.Text;
        objPages.PageKeywordAr = txtPageKeywordsA.Text;
        objPages.PageBodyEn = CKEditorPageBodyE.Text;
        objPages.PageBodyAr = CKEditorPageBodyA.Text;
        objPages.PageLinkPositionNo = int.Parse(txtPageLinkPosition.Text);
        objPages.PageLayoutPosition = ddPageLayoutPosition.SelectedItem.Value.ToString();


        // Assign Name to Images 
        objPages.PageBannerImageEn = Session["BannerImageNameEn"].ToString();
        objPages.PageBannerImageAr = Session["BannerImageNameAr"].ToString();

        objPages.PageBannerLinkEn = txtBannerLinkEnglish.Text;
        objPages.PageBannerLinkAr = txtBannerLinkArabic.Text;

        objPages.PageWindow = ddPageWindow.SelectedItem.Value.ToString();
        objPages.PageActive = bool.Parse(ddPageActive.SelectedItem.Value.ToString());
        objPages.PageVisible = bool.Parse(ddPageHidden.SelectedItem.Value.ToString());

        objPages.PageCreateDate = Helper.GetUAEDateTime();
        objPages.PageUpdateDate = Helper.GetUAEDateTime();
        objPages.PageIPAddress = Request.ServerVariables["REMOTE_ADDR"];

        try
        {

            bool result;
            //result = objBLAddNewPage.CreateNewPage(objPages);
            result = false;

            if (result == true)
            {
                Response.Redirect("PageCreated.aspx");
            }
            else
            {

            }


        }
        catch (Exception ex)
        {
            //lblresult.Text = ex.ToString();
        }

    }

    protected void AsyncFileUpload1_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
    {
        try
        {
            String filePath = string.Empty;
            String CurrentGUID = Guid.NewGuid().ToString();

            if (AsyncFileUpload1.HasFile)
            {
                string filename = System.IO.Path.GetFileName(AsyncFileUpload1.FileName);
                System.IO.FileInfo f = new System.IO.FileInfo(AsyncFileUpload1.PostedFile.FileName);
                int fileSize = Int32.Parse(System.IO.Path.GetFileName(e.FileSize));
                if (fileSize < 1024000) // 1 MB current size size in bytes 102400=100kb  512000 = 500kb
                {
                    if ((f.Extension.ToLower() == ".jpg") || (f.Extension.ToLower() == ".png") || (f.Extension.ToLower() == ".gif") || (f.Extension.ToLower() == ".jpeg"))
                    {

                        filename = CurrentGUID + f.Extension;
                        //string productGUID 
                        filePath = Server.MapPath("../ImageUploads/") + filename;
                        if (System.IO.File.Exists(filePath))
                        {
                            return;
                        }
                        else
                        {
                            //Upload files
                            AsyncFileUpload1.PostedFile.SaveAs(Server.MapPath("../ImageUploads/") + filename);


                 Session["BannerImageNameEn"] = filename.ToString();
                        string errMsg = "File Uploaded Successfully";

                        ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "size", "top.$get(\"" + lblImageUploadMessage1.ClientID + "\").innerHTML='" + errMsg + "';", true);
                        // ResizeImage(string OriginalFile, string NewFile, int NewWidth, int MaxHeight, bool OnlyResizeIfWider)
                        Helper.ResizeImage(filePath, filePath, 150, 80, true);

                    }
                    return;
                }

            }
            else
            {
                lblImageUploadMessage1.Text = "Only type .jpg, .png, .gif are allow";
                string errMsg = "File must be an Image type of .jpg, .png, .gif, .jpeg";
                //client-side error
                ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "size", "top.$get(\"" + lblImageUploadMessage1.ClientID + "\").innerHTML='" + errMsg + "';", true);
                return;
            }
        }
        else
        {
            //lblMesg.Text = "Only type .jpg, .png, .gif are allow";
            string errMsg = "File size is greater the 1MB";
            //client-side error
            ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "size", "top.$get(\"" + lblImageUploadMessage1.ClientID + "\").innerHTML='" + errMsg + "';", true);
            return;
        }
    }
    catch (Exception ex)
    {
    }
}

protected void AsyncFileUpload2_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
{
    try
    {
        String filePath = string.Empty;
        String CurrentGUID = Guid.NewGuid().ToString();
        if (AsyncFileUpload1.HasFile)
        {
            string filename = System.IO.Path.GetFileName(AsyncFileUpload1.FileName);
            System.IO.FileInfo f = new System.IO.FileInfo(AsyncFileUpload1.PostedFile.FileName);
            int fileSize = Int32.Parse(System.IO.Path.GetFileName(e.FileSize));
            if (fileSize < 1024000) // 1 MB current size size in bytes 102400=100kb  512000 = 500kb
            {
                if ((f.Extension.ToLower() == ".jpg") || (f.Extension.ToLower() == ".png") || (f.Extension.ToLower() == ".gif") || (f.Extension.ToLower() == ".jpeg"))
                {
                    filename = CurrentGUID + f.Extension;
                    //string productGUID 
                    filePath = Server.MapPath("../ImageUploads/") + filename;
                    if (System.IO.File.Exists(filePath))
                    {
                        return;
                    }
                    else
                    {
                        //Upload files
                        AsyncFileUpload2.PostedFile.SaveAs(Server.MapPath("../ImageUploads/") + filename);
                        Session["BannerImageNameAr"] = filename.ToString();
                        string errMsg = "File Uploaded Successfully";

                        ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "size", "top.$get(\"" + lblImageUploadMessage2.ClientID + "\").innerHTML='" + errMsg + "';", true);
                        // ResizeImage(string OriginalFile, string NewFile, int NewWidth, int MaxHeight, bool OnlyResizeIfWider)
                        Helper.ResizeImage(filePath, filePath, 150, 80, true);
                    }
                    return;
                }
            }
            else
            {
                lblImageUploadMessage1.Text = "Only type .jpg, .png, .gif are allow";
                string errMsg = "File must be an Image type of .jpg, .png, .gif, .jpeg";
                //client-side error
                ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "size", "top.$get(\"" + lblImageUploadMessage2.ClientID + "\").innerHTML='" + errMsg + "';", true);
                return;
            }
        }
        else
        {
            //lblMesg.Text = "Only type .jpg, .png, .gif are allow";
            string errMsg = "File size is greater the 1MB";
            //client-side error
            ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "size", "top.$get(\"" + lblImageUploadMessage2.ClientID + "\").innerHTML='" + errMsg + "';", true);
            return;
        }
    }
    catch (Exception ex)
    {
    }
}

}

我只想要一个功能,我可以上传两个图像,使用GUID为它们分配唯一名称,最后将图像名称与数据库中的其他表格数据相同。

我正在使用ASP.NET,C#3.0和Framework 4,今天下载的最新版Ajax而且我只能在ASP.Net中完成任务

0 个答案:

没有答案