복붙노트

[JQUERY] 어떻게 JSP / 서블릿과 Ajax를 사용하여 서버에 파일을 업로드하려면?

JQUERY

어떻게 JSP / 서블릿과 Ajax를 사용하여 서버에 파일을 업로드하려면?

해결법


  1. 1.지점에, jQuery를에 의해 사용되는 현재의 XMLHttpRequest의 버전 1, XMLHttpRequest를 통해 자바 스크립트를 사용하여 파일을 업로드 할 수 없습니다. 일반적인 해결 방법은 자바 스크립트가 숨겨진 을 만들 수 있도록하고, 인상이 비동기 적으로 발생한다는 생성되는 것을 대신 그래서 폼을 제출하는 것입니다. 즉, jQuery를 파일 업로드 플러그인의 대부분은 jQuery를 양식 플러그인 (예 : 여기)로 일을 정확히이기도합니다.

    지점에, jQuery를에 의해 사용되는 현재의 XMLHttpRequest의 버전 1, XMLHttpRequest를 통해 자바 스크립트를 사용하여 파일을 업로드 할 수 없습니다. 일반적인 해결 방법은 자바 스크립트가 숨겨진 을 만들 수 있도록하고, 인상이 비동기 적으로 발생한다는 생성되는 것을 대신 그래서 폼을 제출하는 것입니다. 즉, jQuery를 파일 업로드 플러그인의 대부분은 jQuery를 양식 플러그인 (예 : 여기)로 일을 정확히이기도합니다.

    이 클라이언트는 다음과 같은 장애인 JS을 (당신이 지금 가지고 ...),이 때 깨진 아니에요 있도록 HTML 양식을 사용하여 JSP가 같은 방법으로 다시 작성된다고 가정 :

    <form id="upload-form" class="upload-box" action="/Upload" method="post" enctype="multipart/form-data">
        <input type="file" id="file" name="file1" />
        <span id="upload-error" class="error">${uploadError}</span>
        <input type="submit" id="upload-button" value="upload" />
    </form>
    

    그리고 그것은 단지 문제를 플러그인 jQuery를 양식의 도움으로의

    <script src="jquery.js"></script>
    <script src="jquery.form.js"></script>
    <script>
        $(function() {
            $('#upload-form').ajaxForm({
                success: function(msg) {
                    alert("File has been uploaded successfully");
                },
                error: function(msg) {
                    $("#upload-error").text("Couldn't upload file");
                }
            });
        });
    </script>
    

    서블릿 측면에 관해서는, 특별한 물건은 여기에서 할 필요가 없습니다. 그냥 Ajax를 사용하지 않을 경우 당신이 할 것과 같은 방식으로 정확히 구현 방법 : JSP / 서블릿을 사용하여 서버에 파일을 업로드하려면?

    는 X가-요청-으로하는 경우 헤더는 XMLHttpRequest의 같음 여부를 당신은 (당신이 어떤 종류의 응답의 클라이언트를 사용할 수 JS를 가지고있는 경우에 반환하는 방법을 알 수 있도록하는 서블릿에서 추가 검사가 필요합니다 지금과 같은, 그것은 주로 장애인 JS)가 기존의 모바일 브라우저입니다.

    if ("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))) {
        // Return ajax response (e.g. write JSON or XML).
    } else {
        // Return regular response (e.g. forward to JSP).
    }
    

    상대적으로 새로운 XMLHttpRequest의 버전 2는 새로운 파일 및 FormData API를 사용하여 선택한 파일을 전송 할 수 있습니다. 또한 자바 서블릿에 HTML5 파일 업로드를 참조 XMLHttpRequest를 통해 여러 부분으로 파일을 전송.


  2. 2.@ Monsif의 코드는 양식이 일부 다른 입력 다른 다음 파일 형식이있는 경우, 그들은 길을 잃지 만 파일 형식의 입력이 잘 작동합니다. 그래서, 대신 각 양식에 데이터를 복사하고 FormData 객체로 추가로, 원래의 형태 자체는 생성자에 부여 할 수 있습니다.

    @ Monsif의 코드는 양식이 일부 다른 입력 다른 다음 파일 형식이있는 경우, 그들은 길을 잃지 만 파일 형식의 입력이 잘 작동합니다. 그래서, 대신 각 양식에 데이터를 복사하고 FormData 객체로 추가로, 원래의 형태 자체는 생성자에 부여 할 수 있습니다.

    Monsif의 코드와 https://www.new-bamboo.co.uk/blog/2012/01/10/ridiculously-simple-ajax-uploads-with-formdata/ 포스트 @에 관해서는, 나는 다음과 같은 코드로 나온하는 날 위해 일했습니다. 나는 다른 사람을 도움이되기를 바랍니다.

    <script type="text/javascript">
            var files = null; // when files input changes this will be initiliazed.
            $(function() {
                $('#form2Submit').on('submit', uploadFile);
        });
    
            function uploadFile(event) {
                event.stopPropagation();
                event.preventDefault();
                //var files = files;
                var form = document.getElementById('form2Submit');
                var data = new FormData(form);
                postFilesData(data);
    }
    
            function postFilesData(data) {
                $.ajax({
                    url :  'yourUrl',
                    type : 'POST',
                    data : data,
                    cache : false,
                    dataType : 'json',
                    processData : false,
                    contentType : false,
                    success : function(data, textStatus, jqXHR) {
                        alert(data);
                    },
                    error : function(jqXHR, textStatus, errorThrown) {
                        alert('ERRORS: ' + textStatus);
                    }
                });
            }
    </script>
    

    HTML 코드는 다음과 같이 할 수있다 :

    <form id ="form2Submit" action="yourUrl">
      First name:<br>
      <input type="text" name="firstname" value="Mickey">
      <br>
      Last name:<br>
      <input type="text" name="lastname" value="Mouse">
      <br>
    <input id="fileSelect" name="fileSelect[]" type="file" multiple accept=".xml,txt">
    <br>
      <input type="submit" value="Submit">
    </form>
    

  3. 3.이 코드는 나를 위해 잘 작동합니다 :

    이 코드는 나를 위해 잘 작동합니다 :

    $ ( '# fileUploader') ( '변경'을 UploadFile)에.; 기능을 UploadFile (이벤트) { event.stopPropagation (); 에서는 event.preventDefault (); VAR 파일 = event.target.files; VAR 데이터 = 새로운 FormData (); $ .each (파일, 기능 (키, 값) { data.append (키 값); }); postFilesData (데이터); } postFilesData 기능 (데이터) { {(아약스 $ URL : 'yourUrl' 입력 : 'POST', 데이터 : 데이터, 캐시 : 거짓, dataType와 'JSON' processData : 거짓, ContentType을 : 거짓, 성공 : 기능 (데이터 textStatus, jqXHR) { //성공 }, 오류 : 함수 (jqXHR, textStatus, errorThrown) { 을 console.log ( '오류 :'+ textStatus); } }); }


  4. 4.이 코드는 나를 위해 작동합니다.

    이 코드는 나를 위해 작동합니다.

    중고 공유지는 공유지 파일 upload.jar와 jQuery를 양식 플러그인 &를 io.jar