2013-11-13 2 views
0

Я попытался загрузить файлы в папку, используя сценарий загрузки jquery ajax в asp.net. Я показываю пользовательское изображение загрузки файлов, а не управление загрузкой файлов. Этот метод отлично работает в firefox и chrome. Но в IE он не работает. Мой код ниже:Как загрузить файлы в папку с помощью jquery в asp.net?

<img src="Images/attach.png" title="Add Attachment" style="vertical-align: middle; height:24px;cursor:pointer; " onclick="document.getElementById('fileToUpload').click();" id="attach" alt=""/>&nbsp;<img src="images/ajax-loader.gif" style="height:24px;vertical-align: middle;display:none;" id="noteloading" alt=""/> <asp:FileUpload ID="fileToUpload" runat="server" style="display:none;" ClientIDMode="Static" onchange="getFileName()" /> 
<input type="button" value="Submit" onclick="ajaxFileUpload()" /> 

Сценарий:

function ajaxFileUpload() 
{ 

var fileName = $('#<%=fileToUpload.ClientID %>').val().replace(/.*(\/|\\)/, ''); 
       var user = '<%= User.Identity.Name%>'; 
       $('#NotesStatus').val(''); 
       $(obj).hide(); 
       if (fileName != "" && fileName != null) { 

        $.ajaxFileUpload({ url: 'AjaxFileUploader.ashx', 
         secureuri: false, 
         fileElementId: 'fileToUpload', 
         dataType: 'json', 
         success: function (data, status) { 
          if (typeof (data.error) != 'undefined') { 
           if (data.error != '') { 
            alert(data.error); 
           } else { 
            SaveNotesData(entryId, formId, user, action, comments, actDate, relatedData, data.msg); 
           } 
          } 
         }, 
         error: function (data, status, e) { 
          alert(e); 
          alert('hai'); 
         } 
        }); 

       } 
       else { 
        SaveNotesData(entryId, formId, user, action, comments, actDate, relatedData, fileName); 
       } 
} 
function SaveNotesData(entryId, formId, user, action, comments, actDate, relatedData, fileName) 
{ 
     $.ajax({ url: "AjaxService.asmx/AddEntryNotes", contentType: "application/json; charset=utf-8", type: "POST", 
       data: '{"entryid":' + entryId + ', "frmid":"' + formId + '","user":"<%= User.Identity.Name%>","action":"' + action + '","comments":"' + comments + '","actDate":"' + actDate + '", "relatedData":"'+relatedData+'", "fileName":"' + fileName + '"}', 
       success: function (result) { $('#imgprogressing').hide(); 
        if (result == null || result.d == null) return; 
        if (result.d == "true") 
        { 
         $('#NotesStatus').append("Notes Added Successfully"); 
         $('.usernotes').load("NotesPopup.aspx?formId=" + encodeURI(formId) + "&entryId=" + encodeURI(entryId) + "&uid="+(new Date()).getTime()); 

         $('.toolTip').each(function (index) { 
          attachNotes($(this).attr("entryid"), $(this).attr("frm"), $(this)); 
         }); 

         $('#<%=divAddNote.ClientID %>').dialog('close'); 



        } 
        else 
        { 
         alert("Failure in Notes Addition !"); 
        } 
        //getNotes(entryId, formId, $('.usernotes')); 
        //HideNotesPopup(); 
        document.getElementById('hlNoteSubmit').style.visibility = 'visible'; 
        $('#NotesStatus').html(''); $('#<%=taComments.ClientID %>').val(''); 
        $('#<%= actionDate.ClientID %>').val($.datepicker.formatDate('m/d/yy', new Date())); 
       }, 
       error: function (XMLHttpRequest, textStatus, errorThrown) { $('#imgprogressing').hide(); alert('Loading failed!!'); } 
      }); 
} 

AjaxFileUploader.ashx:

if (context.Request.Files.Count > 0) 
     { 
      string path = context.Server.MapPath("~/Uploads"); 
      if (!Directory.Exists(path)) 
       Directory.CreateDirectory(path); 

      var file = context.Request.Files[0]; 

      string fileName; 

      if (HttpContext.Current.Request.Browser.Browser.ToUpper() == "IE") 
      { 
       string[] files = file.FileName.Split(new char[] { '\\' }); 
       fileName = files[files.Length - 1]; 
      } 
      else 
      { 
       fileName = file.FileName; 
      } 
      string newFilename = Guid.NewGuid().ToString(); 
      FileInfo fInfo = new FileInfo(fileName); 
      newFilename = string.Format("{0}{1}", newFilename, fInfo.Extension); 
      string strFileName = newFilename; 
      fileName = Path.Combine(path, newFilename); 
      file.SaveAs(fileName); 


      string msg = "{"; 
      msg += string.Format("error:'{0}',\n", string.Empty); 
      msg += string.Format("msg:'{0}'\n", strFileName); 
      msg += "}"; 
      context.Response.Write(msg); 


     } 

Когда я показываю контроль загрузки файлов и просматривать через контроль загрузки файла, он работает в IE без проблем. Вместо того, чтобы установить, что элемент управления filupload не отображает никого и запускает загрузку файла, щелкните по пользовательскому изображению, не нажав не все, работая в ie. Но хорошо работает в firefox и chrome. Как решить это?

+0

Какая версия платформы .NET вы используете? Я думаю, что с 3,5 был элемент управления FileUpload, который вы могли бы использовать для этого ... может быть проще реализовать, чем решение AJAX. – Tim

+0

@Tim, я использую .NET framework 4.0. Если вы знаете решение, скажите мне. – RGS

+0

Требуется ли AJAX? Для этого есть встроенный элемент управления, и вам не нужно будет запускать HTTP-обработчик ... это похоже на использование трех строк кода. http://stackoverflow.com/questions/2241545/how-to-correctly-use-the-asp-net-fileupload-control – Tim

ответ

0
<div style="position:relative;display:inline-block;left:-4px;bottom:-6px;width:16px; height: 24px;overflow:hidden;"> 
<img src="/images/attach.jpg" alt="" title="Add Attachment" style="height:24px;width:16px; position: relative;top: 1px; left: 0px;"/> 
<input type="file" id="fileupload" name="upload" onchange="getFileName();" style=" opacity: 0;font-size: 50px;width:16px; filter:alpha(opacity: 0); position: relative; top: -22px; left: -1px" /> 
</div> 

Для получения дополнительной информации см. Это. In JavaScript can I make a "click" event fire programmatically for a file input element?

Демо:

http://jsfiddle.net/k6zBQ/2/

Смежные вопросы