Загрузка файлов через jQuery, предоставляется объект FormData и имя файла отсутствует, запрос GET
Я использую скрипт jQuery для загрузки файлов на новую страницу. Это тоже как-то работает, но проблема в том, что он отправляет данные формы как object FormData
,
Вот код:
$('#submit').click(function () {
var formData = new FormData($(this).form);
$.ajax({
url: '/test/file_capture',
//Ajax events
beforeSend: function (e) {
alert('Are you sure you want to upload document.');
},
success: function (e) {
alert('Upload completed');
},
error: function (e) {
alert('error ' + e.message);
},
// Form data
data: formData,
//Options to tell jQuery not to process data or worry about content-type.
cache: false,
contentType: false,
processData: false
});
return false;
});
HTML часть выглядит так:
<form enctype="multipart/form-data">
<input type="file" id="image" name="image" accept="Image/*" />
<input type="submit" id="submit" name="" value="Upload" />
</form>
Но сгенерированная ссылка выглядит так:
HTTP:// локальный:4965/ тест /file_capture [объект%20FormData]&_=1386501633340
Который не имеет имени изображения или любой другой вещи, прикрепленной к нему. Что мне не хватает? Даже если ошибки нет, запрос выполнен, и отображается предупреждение "Загрузка завершена".
3 ответа
Вы должны только отправить файл - не полная форма
var fileInput = $('#image');
var file = fileInput.files[0];
var formData = new FormData();
formData.append('file', file);
РЕДАКТИРОВАТЬ
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<form enctype="multipart/form-data">
<input type="file" id="image" name="image" accept="Image/*" />
<input type="submit" id="submit" name="" value="Upload" />
</form>
<script>
$('#submit').click(function (event) {
event.preventDefault()
var file = $('#image').get(0).files[0];
var formData = new FormData();
formData.append('file', file);
$.ajax({
url: '/test/file_capture',
//Ajax events
beforeSend: function (e) {
alert('Are you sure you want to upload document.');
},
success: function (e) {
alert('Upload completed');
},
error: function (e) {
alert('error ' + e.message);
},
// Form data
data: formData,
type: 'POST',
//Options to tell jQuery not to process data or worry about content-type.
cache: false,
contentType: false,
processData: false
});
return false;
});
</script>
Вам нужно явно получить файл.
var image = $('#image')[0].files[0];
А затем добавьте файл в formData:
formData.append( image );
Вот пример того, как я это делаю:
var image = $('#image')[0].files[0];
if( window.FormData ) {
formdata = new FormData();
formdata.append( 'image', image );
formdata.append( 'action', 'save-image' );
$.ajax({
url: 'controller/handler',
type: 'POST',
data: formdata,
processData: false,
contentType: false,
success: function( res ) {
// Handle it.
}
});
}
}
Файлы не могут быть загружены методом GET. Вам нужно использовать POST.
$.ajax({
method: 'POST',
url: '/test/file_capture',
// ...
Кроме того, вам нужен HTML 5, чтобы иметь возможность загружать файлы (хотя Firefox может разрешить это с более ранним XHTML).
Сначала получите объект
First get the Object from HTML
//HTML
<input id = "file_name" type = "file" />
//JS
var formData = new FormData()
var file_obj = document.getElementById("file_name")
formData.append('file_name', file_obj.files[0]);
$.ajax({
url: url,
type: 'POST',
data: formData,
success: function (data) {
},
cache: false,
contentType: false,
processData: false
})