Могу ли я просто отправить файл / файлы из файла <input type="file">
'upload.php' без использования каких-либо форм с помощью метода POST с использованием jQuery. Тег ввода не находится внутри тега формы. Стоит индивидуально. Поэтому я не хочу использовать плагины jQuery, такие как ajaxForm или ajaxSubmit.
javascript
jquery
html
Эло Пери
источник
источник
Ответы:
Вы можете использовать FormData для отправки данных с помощью запроса POST. Вот простой пример:
var myFormData = new FormData(); myFormData.append('pictureFile', pictureInput.files[0]); $.ajax({ url: 'upload.php', type: 'POST', processData: false, // important contentType: false, // important dataType : 'json', data: myFormData });
Вам не нужно использовать форму для выполнения запроса ajax, если вы знаете настройки своего запроса (например, URL-адрес, метод и данные параметров).
источник
processData: false
иcontentType: false
к объекту настроек, иначе вы получитеВсе ответы здесь все еще используют API FormData . Это похоже на
"multipart/form-data"
загрузку без формы. Вы также можете загрузить файл непосредственно как содержимое внутри телаPOST
запроса, используяxmlHttpRequest
следующее:var xmlHttpRequest = new XMLHttpRequest(); var file = ...file handle... var fileName = ...file name... var target = ...target... var mimeType = ...mime type... xmlHttpRequest.open('POST', target, true); xmlHttpRequest.setRequestHeader('Content-Type', mimeType); xmlHttpRequest.setRequestHeader('Content-Disposition', 'attachment; filename="' + fileName + '"'); xmlHttpRequest.send(file);
Content-Type
аContent-Disposition
заголовки используются для объяснения того, что мы отправляем (тип mime и имя файла).Я также разместил аналогичный ответ здесь .
источник
fetch()
?Основываясь на этом руководстве , вот очень простой способ сделать это:
$('your_trigger_element_selector').on('click', function(){ var data = new FormData(); data.append('input_file_name', $('your_file_input_selector').prop('files')[0]); // append other variables to data if you want: data.append('field_name_x', field_value_x); $.ajax({ type: 'POST', processData: false, // important contentType: false, // important data: data, url: your_ajax_path, dataType : 'json', // in PHP you can call and process file in the same way as if it was submitted from a form: // $_FILES['input_file_name'] success: function(jsonData){ ... } ... }); });
Не забудьте добавить правильную обработку ошибок
источник
Шаг 1: Создайте HTML-страницу, на которой нужно разместить HTML-код.
Шаг 2: В нижней части страницы кода HTML (нижний колонтитул) создайте Javascript: и поместите код Jquery в тег Script.
Шаг 3: Создайте файл PHP и скопируйте код PHP. после кода JQuery в
$.ajax
URL- адресе кода применяется тот, который указан в имени вашего файла php.JS
//$(document).on("change", "#avatar", function() { // If you want to upload without a submit button $(document).on("click", "#upload", function() { var file_data = $("#avatar").prop("files")[0]; // Getting the properties of file from file field var form_data = new FormData(); // Creating object of FormData class form_data.append("file", file_data) // Appending parameter named file with properties of file_field to form_data form_data.append("user_id", 123) // Adding extra parameters to form_data $.ajax({ url: "/upload_avatar", // Upload Script dataType: 'script', cache: false, contentType: false, processData: false, data: form_data, // Setting the data attribute of ajax with file_data type: 'post', success: function(data) { // Do something after Ajax completes } }); });
HTML
<input id="avatar" type="file" name="avatar" /> <button id="upload" value="Upload" />
PHP
источник
,
послеtype: 'post'
tmp
каталог, пока не будет отправлена вся форма? (скажем, это была мультиформа)?Попробуйте этот puglin simpleUpload , без формы
HTML:
<input type="file" name="arquivo" id="simpleUpload" multiple > <button type="button" id="enviar">Enviar</button>
Javascript:
$('#simpleUpload').simpleUpload({ url: 'upload.php', trigger: '#enviar', success: function(data){ alert('Envio com sucesso'); } });
источник
Извините за то, что был таким парнем, но AngularJS предлагает простое и элегантное решение.
Вот код, который я использую:
ngApp.controller('ngController', ['$upload', function($upload) { $scope.Upload = function($files, index) { for (var i = 0; i < $files.length; i++) { var file = $files[i]; $scope.upload = $upload.upload({ file: file, url: '/File/Upload', data: { id: 1 //some data you want to send along with the file, name: 'ABC' //some data you want to send along with the file, }, }).progress(function(evt) { }).success(function(data, status, headers, config) { alert('Upload done'); } }) .error(function(message) { alert('Upload failed'); }); } }; }]);
.Hidden { display: none }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> <div data-ng-controller="ngController"> <input type="button" value="Browse" onclick="$(this).next().click();" /> <input type="file" ng-file-select="Upload($files, 1)" class="Hidden" /> </div>
На стороне сервера у меня есть контроллер MVC с действием, которое сохраняет загруженные файлы, найденные в коллекции Request.Files, и возвращает JsonResult.
Если вы используете AngularJS, попробуйте это, если нет ... извините, приятель :-)
источник