簡體   English   中英

html表單中的文件上傳字段不會發送到服務器

[英]File upload fields from html form aren't sent to server

在我當前的Spring項目中,某些表單具有供用戶將圖像文件上傳到服務器的字段。 但是,當我檢查使用瀏覽器(Firefox)的網絡監視器將哪些參數發送到服務器時,我注意到文件上載字段沒有發送到服務器(僅列出了常規字段)。

我曾經知道只有具有屬性name的字段被發送到服務器,並且我確保此字段具有此屬性。 表單的html代碼與此類似:

    <form id="command" role="form" class="form" action="Categoria/cadastra" method="post" enctype="multipart/form-data">
    <fieldset>
    <div class="panel panel-default">
        <div class="panel-heading">
        </div>
        <div class="panel-body">
            <p>
            <label for="nome" class="form-control">nome</label>
            <input id="nome" name="nome" class="form-control" type="text" value=""/>
            </p>
        </div>
    </div>
        <div class="panel panel-default include">
            <div class="panel-heading">
                Selecione um arquivo de imagem para <i>capa da categoria</i>
            </div>
            <div class="panel-body">
                <input type="file" name="file" class="form-control"/>
            </div>
        </div>
    <p>
        <button type="submit" class="btn btn-lg btn-primary">Cadastrar</button>
    </p>
    </fieldset>
</form>

該請求由我的控制器中的此方法處理:

@RequestMapping(value="cadastra", method=RequestMethod.POST)
@ResponseBody
public String cadastrea(@ModelAttribute("object") E object, BindingResult result, @RequestParam(value="file", required=false) MultipartFile file) {
    if(serv.cadastra(object)) {
        if(serv.upload_picture(object, file))
            return "yes";
        else
            return "data";
    }
    else {
        return "not";
    }
}

現在,我使用一個jQuery腳本來處理將請求發送到服務器,接收響應並向用戶顯示一條消息的過程,以告知處理結果。 這是我正在使用的腳本:

$(document).on('submit', '.form', function (event) {
    event.preventDefault();

    var $form = $( this ),  url = $form.attr( "action" );
    var posting = $.post( url, $(this).serialize() );
    posting.done(function( data ) {
        var alert = $("#"+data); 
        alert.css("display", "block");
        alert.fadeOut(2500);
        $(".form").each(function(){
            this.reset();
        });
    });
});

有人告訴我不能使用ajax調用來發送file類型的字段。 這是真的? 如果是,沒有腳本,還有其他方法可以做到這一點(捕獲服務器的響應並在同一頁面中顯示消息,而不是重定向到另一頁面)嗎?

看一下jqueryform插件。 我相信他們可以通過將上傳的文件包裝在隱藏的iframe中並使用ajaxSubmit函數傳遞文件來解決此問題。

遵循以下原則

$('#yourForm').ajaxSubmit({
type: 'POST',
url: 'yourUrl'
});

應該做到這一點。 然后,在控制器中,您將查看HttpContext.Current.Request.Files並處理該集合中的項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM