У меня есть входной контроль HTML5, который, позволяющий конечный пользователь загрузить файл .csv:Отображение ответа сервера после загрузки файла на сервер
<input id="ImportFile" type="file" name="ImportFile" data-val="true" data-val-required="Please select a file" title="Browse for a file to upload" />
Это красиво размещенный в форме, которая позволяет мне представить загруженные данные на сервер:
verify: function() {
// Run form validate to style controls if they're invalid.
var isValid = this.form.valid();
if (isValid) {
this.isVerifyInput.val(true);
this.form.submit();
this.isVerifyInput.val(false);
}
}
Во время проверки, сервер должен иметь возможность информировать пользователя об ошибках, с которыми столкнулись при проверке их закачанный файл.
Таким образом, моя форма цели скрытый IFRAME, который потребляет действие представить Страница обновления:
<form action="/csweb/Component/ImportComponents" enctype="multipart/form-data" id="ImportComponentsForm" method="post" name="ImportComponentsForm" target="UploadTarget">
<input data-val="true" data-val-required="The IsVerify field is required." id="IsVerify" name="IsVerify" type="hidden" value="false" class="valid">
<input id="ImportFile" type="file" name="ImportFile" data-val="true" data-val-required="Please select a file" title="Browse for a file to upload" class="valid">
</form>
<iframe id="UploadTarget" name="UploadTarget" class="uploadTarget"></iframe>
Где я потом уведомлен об отправке завершения:
this.$el.find('iframe.uploadTarget').load(this.onUploadComplete.bind(this));
Это не потому что у меня нет никакого способа прочитать ответ сервера после отправки формы, конечно.
Однако я немного смущен. Статьи по StackOverflow относительно этого вопроса свидетельствуют о сериализации данных формы:
Насколько мне известно - это не возможно сериализовать загруженные данные и отправить его на сервер. Я понимаю, что загруженные данные должны быть отправлены через form.submit. Это верно?
Если да, то как я могу подтвердить проверку загруженного содержимого на стороне сервера? Казалось бы, мой единственный вариант - отправить форму, временно записать информационную серверную сторону, дождаться события загрузки iframe и затем выдать на сервер запрос GET для извлечения любых потенциальных сообщений. Это мой единственный вариант?
Загрузка файлов боль .. Другой вариант заключается в использовании [FormData] (https://developer.mozilla.org/ en-US/docs/Web/Guide/Using_FormData_Objects) для отправки сообщения формы асинхронно ... но FormData не поддерживается
adamb
Я посмотрю на jQuery FileUpload, спасибо. Мне нужно поддерживать IE8 +. –