亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用JSP/Servlet和Ajax將文件上傳到服務器?

如何使用JSP/Servlet和Ajax將文件上傳到服務器?

LEATH 2019-07-13 15:16:40
我正在創建一個JSP/Servlet Web應用程序,我希望通過Ajax將一個文件上傳到servlet。我該怎么做呢?我正在使用jQuery。到目前為止,我已經做了如下工作:<form class="upload-box">     <input type="file" id="file" name="file1" />     <span id="upload-error" class="error" />     <input type="submit" id="upload-button" value="upload" /></form>使用這個jQuery:$(document).on("#upload-button", "click", function() {     $.ajax({         type: "POST",         url: "/Upload",         async: true,         data: $(".upload-box").serialize(),         contentType: "multipart/form-data",         processData: false,         success: function(msg) {             alert("File has been uploaded successfully");         },         error:function(msg) {             $("#upload-error").html("Couldn't upload file");         }     });});但是,它似乎沒有發送文件內容。
查看完整描述

3 回答

?
溫溫醬

TA貢獻1752條經驗 獲得超4個贊

說到點子上,如當前XMLHttpRequestjQuery使用的版本1是可以使用JavaScript上傳文件XMLHttpRequest..常見的解決方法是讓JavaScript創建一個隱藏的<iframe>然后將表單提交給它,這樣就會產生異步發生的印象。這也正是大多數jQuery文件上傳插件所做的事情,例如jQuery表單插件 (這里的例子).

假設您的帶有HTML表單的JSP是以這樣的方式重寫的,所以它不會壞的當客戶端禁用JS(就像現在的.)時,如下所示:

<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>

至于servlet方面,這里不需要做任何特殊的事情。只需以與不使用Ajax時完全相同的方式實現它:如何使用JSP/Servlet將文件上傳到服務器?

如果X-Requested-With標頭等于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能夠使用新的FileFormDataAPI。另見HTML 5文件上傳到Javaservlet通過XMLHttpRequest將文件作為多部分發送.


查看完整回答
反對 回復 2019-07-13
?
慕萊塢森

TA貢獻1810條經驗 獲得超4個贊

這段代碼對我來說很好:


$('#fileUploader').on('change', uploadFile);



function uploadFile(event)

  {

      event.stopPropagation(); 

      event.preventDefault(); 

      var files = event.target.files; 

      var data = new FormData();

      $.each(files, function(key, value)

      {

          data.append(key, value);

      });

      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)

        {

          //success

        },

        error: function(jqXHR, textStatus, errorThrown)

        {

            console.log('ERRORS: ' + textStatus);

        }

      });

  }

<form method="POST" enctype="multipart/form-data">

  <input type="file" name="file" id="fileUploader"/>

</form>


查看完整回答
反對 回復 2019-07-13
  • 3 回答
  • 0 關注
  • 984 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號