2015-03-27 2 views
2

Первое случайное исключение типа «System.ArgumentOutOfRangeException» произошло в mscorlib.dll, когда я пытаюсь загрузить файл на сервер.Ошибка при загрузке файла с помощью jQuery и Asp.Net

$('#But_Upload').click(function() { 
      console.log("its working\n"); 
      var ajaxRequest = $.ajax({ 
       type: "POST", 
       url: "../HANDLERS/Handler1.ashx", 
       contentType: false, 
       processData: false, 
       data: $('#upload').get(0).files.toString(), 
       async: true, 
       success: function (xhr) { 
        console.log("done"); 
       } 
      }); 
     }); 
    }); 
</script> 

Мой код сервера в C# обработчиком является

public void ProcessRequest(HttpContext context) 
    { 
     System.Diagnostics.Debug.Write(context.ToString()); 
     try 
     { 
       HttpPostedFile httpPostedFile = context.Request.Files.Get(0); 
       var fileSavePath = HttpContext.Current.Server.MapPath("~/upl") + httpPostedFile.FileName; 
       httpPostedFile.SaveAs(fileSavePath); 
      } 
     catch(Exception E) 
     { } 
    } 

Я получаю исключение именно в httpPostedFile линии, я боролся с этим для ослов возраста, пожалуйста помощь.

+0

Можете ли вы попробовать этот ответ - http://stackoverflow.com/questions/11880952/a-first-chance-exception-of-type-system-argumentoutofrangeexception-occurred-i –

+1

@ShrihariIyer - не говори, что сообщение об исключении/ошибке, которое вы получаете - мы любим гадать. – Igor

+0

@onsjjss Я пытаюсь загрузить изображение. Получите другие ссылки? –

ответ

2

Попробуйте этот код. Для IE есть специальное изменение, поэтому он работает во всех браузерах. Думаю, вы столкнулись с проблемой только в IE?

HttpPostedFile hpf = TryCast(Context.Request.Files(0), HttpPostedFile); 

if ((HttpContext.Current.Request.Browser.Browser.ToUpper() == "IE")) { 
    string[] files = hpf.FileName.Split(new char[] {"\\", c}); 
    MySerializedobject.FileName = files[(files.Length - 1)]; 
} 
else { 
    MySerializedobject.FileName = hpf.FileName; 
} 

string FileType = hpf.ContentType; 
string FileExtension = Path.GetExtension(hpf.FileName); 
MySerializedobject.FileType = ("." + MySerializedobject.FileName.Split(".")[1]); 
MySerializedobject.FileSize = hpf.ContentLength; 
MySerializedobject.FileStream = hpf.InputStream; 
+0

ahh ,Оно работает! Благодарю. –

0

Использовать этот

public void ProcessRequest(HttpContext context) 
    { 
     HttpPostedFile postedFile = context.Request.Files[0]; 
     string savepath = "", tempPath = ""; 
     context.Response.ContentType = "text/plain"; 
     tempPath = System.Configuration.ConfigurationManager.AppSettings["YourFilePath"]; 
     savepath = context.Server.MapPath(tempPath); 
     string extension = System.IO.Path.GetExtension(postedFile.FileName); 
     string filename = System.IO.Path.GetFileNameWithoutExtension(postedFile.FileName) + extension; 
     if (!Directory.Exists(savepath)) 
     { 
      Directory.CreateDirectory(savepath); 
     } 
     System.IO.File.Delete(savepath + @"\" + filename); 
     postedFile.SaveAs(savepath + @"\" + filename); 
    } 

на сценарий:

$('#But_Upload').click(function() { 
    var files = $("#<%=upload.ClientID %>").get(0).files; 
    var test = new FormData(); 
    test.append(files[0].name, files[0]); 
    console.log("its working\n"); 
    var ajaxRequest = $.ajax({ 
     type: "POST", 
     url: "../HANDLERS/Handler1.ashx", 
     contentType: false, 
     processData: false, 
     data: test, 
     async: true, 
     success: function (xhr) { 
      console.log("done"); 
     } 
    }); 
}); 
+0

Получение исключения System.ArgumentOutOfRangeException {«Индекс был за пределами допустимого диапазона. Должен быть неотрицательным и меньше размера коллекции. \ R \ nПараметр: index"} Справка PLS –

+0

работает на моей стороне –