2013-10-09 1 views
3

Использование полезной информации, которую я нашел здесь:Как я могу получить опубликованный файл на стороне сервера из запроса Ajax в asp.net-webpages?

How can I upload files asynchronously?

Я был в состоянии получить данные формы на стороне сервера с помощью следующей JQuery (очень немного изменен по ссылке выше):

$('#addFileInput').change(function() { 
    var file = this.files[0]; 
    name = file.name; 
    size = file.size; 
    type = file.type; 
    //Your validation 
}); 

$('.submitFile').click(function() { 
    var formData = new FormData($("#fileUploadForm")); 
    $.ajax({ 
     url: '/AJAX Pages/Compute_File_Upload.cshtml', //Server script to process data 
     type: 'POST', 
     xhr: function() { // Custom XMLHttpRequest 
      var myXhr = $.ajaxSettings.xhr(); 
      if (myXhr.upload) { // Check if upload property exists 
       myXhr.upload.addEventListener('progress', progressHandlingFunction, false); // For handling the progress of the upload 
      } 
      return myXhr; 
     }, 
     //Ajax events 
     beforeSend: function() { 
      $("#progressBar").css("visibility", "visible"); 
     }, 
     success: function (response) { 
      $(".editLabelTitle").text(response); 
     }, 
     //error: errorHandler, 
     // Form data 
     data: formData, 
     //Options to tell jQuery not to process data or worry about content-type. 
     cache: false, 
     contentType: false, 
     processData: false 
    }); 
}); 

function progressHandlingFunction(e) { 
    if (e.lengthComputable) { 
     $('progress').attr({ value: e.loaded, max: e.total }); 
    } 
} 

Вот HTML, который участвует:

<div class=\"addFileBox\"> 
    <div class=\"editPageSubTitle dragHandle\"> 
     Add File 
     <button id=\"closeAddFileBox\">X</button> 
    </div> 
    <div class=\"innerAddFileDiv\"> 
     <form id=\"fileUploadForm\" enctype=\"multipart/form-data\"> 
      <input id=\"addFileInput\" name=\"addFileInput\" type=\"file\" /> 
     </form> 
     <br/> 
     <progress id=\"progressBar\"></progress> 
     <br/> 
     <button class=\"submitFile\">Submit File</button> 
    </div> 
</div> 

Запрос Ajax сам по себе отлично работает. Проблема возникает, когда я не знаю, как получить файл на серверном коде (обычно я бы просто нашел вход с Request.Files["someFileId"]), но по мере отправки всей формы DataData это не работает так, как я знаком. ?

C# CodeBehind

@{ 
Layout = ""; 

if(IsAjax) 
{ 
    var file = Request.Files["addFileInput"]; 

    var fileName = Path.GetFileName(file.FileName); 
    var path = Path.Combine(Server.MapPath("~/CMS Files/UtilityBilling"), fileName); 
    file.SaveAs(path); 
} 

}

Что такое правильный способ получить доступ к данному файлу, учитывая мой сценарий и окружающей среду

+1

Теоретически вы будете обращаться к нему так же, как и к нему, как если бы он был опубликован с использованием тега

. –

+0

@KevinB Вот как мой код настроен сейчас, но я получаю ошибку «Object reference not set to the instance of object» в строке 'var fileName = Path.GetFileName (file.FileName);'. – VoidKing

+0

@KevinB Я использовал 'Request.Files' раньше на сообщениях обычной формы. Вы уверены, что он должен быть доступен одинаково? Я задаюсь вопросом ... – VoidKing

ответ

2

Попробуйте это из коды:

 HttpFileCollection filesCollection = HttpContext.Current.Request.Files; 
     var fileName = filesCollection[0]; 
     string filePath = Path.Combine(HttpContext.Current.Server.MapPath("~/SaveDir"), fileName.FileName); 
     fileName.SaveAs(filePath); 
+0

Ну, я не должен так поступать, потому что я не имею дело с коллекцией файлов, всего за один раз. – VoidKing

+0

Я все равно попробую, но мне придется использовать это в цикле for или foreach, хотя нет? – VoidKing

+0

Пожалуйста, попробуйте, я его отредактировал – christiangobo

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