[英]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.