Использование полезной информации, которую я нашел здесь:Как я могу получить опубликованный файл на стороне сервера из запроса 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);
}
}
Что такое правильный способ получить доступ к данному файлу, учитывая мой сценарий и окружающей среду
Теоретически вы будете обращаться к нему так же, как и к нему, как если бы он был опубликован с использованием тега
@KevinB Вот как мой код настроен сейчас, но я получаю ошибку «Object reference not set to the instance of object» в строке 'var fileName = Path.GetFileName (file.FileName);'. – VoidKing
@KevinB Я использовал 'Request.Files' раньше на сообщениях обычной формы. Вы уверены, что он должен быть доступен одинаково? Я задаюсь вопросом ... – VoidKing