我不太熟悉Ajax和客戶端應用程序(我主要是服務器端開發人員)。 我需要添加一個簡單的HTML頁面,一個上傳文件並將其傳遞給Apache-CXF服務的按鈕。使用Ajax和Apache CXF上傳文件
我不會成功地在客戶端和服務器之間進行這種「動搖」。 我得到:
java.lang.RuntimeException:org.apache.cxf.interceptor.Fault:無法確定消息的邊界!
這是Java的服務的定義:
@Path("/")
@Produces(MediaType.TEXT_PLAIN)
@Getter
@Setter
@CrossOriginResourceSharing(allowAllOrigins = true)
public class NLPRestService {
@POST
@Path("/uploadPosRulesFile")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public void uploadFile(@Multipart(value="file", type="text/plain") InputStream file) {
//Here will be the code that handles the file content - I'll know what do with it once I'll succeed to get here
}
}
這是HTML文件:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>My-App</title>
<script type="text/javascript" src="js/jquery/jquery-2.1.1.min.js"></script>
<script type="text/javascript" src="js/jquery/jquery.ui.widget.js"></script>
<script type="text/javascript" src="js/parseText.js"></script>
<script type="text/javascript" src="js/uploadPosRules.js"></script>
<script src="bootstrap/js/bootstrap.min.js"></script>
<link href="bootstrap/css/bootstrap.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div style="padding: 20px;">
<h1>my-app</h1>
<form id="uploadPosRulesform" >
<div style="width: 700px;">
Upload new POS Rules File <input id="fileupload" type="file" name="file" />
<input id="submit" value="upload POS RULE file" type="button" onclick="uploadFiles()" />
</div>
</form>
<!-- Here comes another form that do another thing - irrelevant -->
<form id="form">
...
</form>
</div>
</body>
</html>
最後的JavaScript代碼,做AJAX調用:
function uploadFiles() {
event.stopPropagation(); // Stop stuff happening
event.preventDefault(); // Totally stop stuff happening
// START A LOADING SPINNER HERE
// Create a formdata object and add the files
$.ajax({
url : '../services/nlpService/uploadPosRulesFile',
type : 'POST',
data: { file: $('#fileupload').val()},
cache : false,
dataType : 'text/plain',
processData : false, // Don't process the files
contentType: 'multipart/form-data',
//contentType : false, // Set content type to false as jQuery will tell the server its a query string request
success : function(data, textStatus, jqXHR) {
alert(data);
if (typeof data.error === 'undefined') {
} else {
// Handle errors here
console.log('ERRORS: ' + data.error);
}
},
error : function(jqXHR, textStatus, errorThrown) {
// Handle errors here
console.log('ERRORS: ', jqXHR, textStatus, errorThrown);
$('#alert').css('display', 'block');
$('#alert').html(jqXHR.response);
// STOP LOADING SPINNER
}
});
}
這可能是一個非常基本的問題(因爲我很喜歡沒有完全理解它...) - 我會感謝您的幫助!
非常感謝
大問題,非常詳細和明確的。 – alkis
你有沒有找到解決方案?如果是,請提供答案。我對這個問題的性質非常感興趣。 – alkis
不幸的不是。我現在放棄了它,因爲它對我們來說不是那麼重要,也沒有理由花時間在它上面。如果您發現解決方案,我會非常感激。謝謝:) –