[javascript] 양식없이 파일 업로드

어떤 양식도 사용하지 않고 <input type="file">jQuery를 사용하여 POST 메서드를 사용하여 ‘upload.php’로 파일 / 파일을 보낼 수 있습니다 . 입력 태그가 양식 태그 안에 없습니다. 그것은 개별적으로 서 있습니다. 그래서 ‘ajaxForm’또는 ‘ajaxSubmit’과 같은 jQuery 플러그인을 사용하고 싶지 않습니다.



답변

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
});

요청 설정 (예 : URL, 메소드 및 매개 변수 데이터)을 알고 있으면 양식을 사용하여 ajax 요청을 할 필요가 없습니다.


답변

여기의 모든 답변은 여전히 FormData API를 사용하고 있습니다. "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 형식 및 파일 이름)을 보내는 것을 설명하는 데 사용됩니다.

나는 또한 여기 에 비슷한 답변을 게시했습니다 .


답변

이 튜토리얼을 바탕으로 여기에 매우 기본적인 방법이 있습니다.

$('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 코드를 넣습니다.

3 단계 : PHP 파일 및 PHP 코드 사본을 생성합니다. $.ajax코드 url의 Jquery 코드 후 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

print_r($_FILES);
print_r($_POST);


답변

이 puglin의 시도 simpleUpload을 , 필요 양식을하지 않습니다

HTML :

<input type="file" name="arquivo" id="simpleUpload" multiple >
<button type="button" id="enviar">Enviar</button>

자바 스크립트 :

$('#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>

서버 측에는 Request.Files 컬렉션에서 찾은 업로드 파일을 저장하고 JsonResult를 반환하는 작업이있는 MVC 컨트롤러가 있습니다.

AngularJS를 사용한다면 이것을 시도해보십시오. 그렇지 않다면 … 미안 메이트 🙂


답변