【发布时间】:2017-05-03 01:05:30
【问题描述】:
我正在从桌面上传一张图片,并将这张图片转换为 javascript 中的基本代码。之后,我想将此图像基本代码与多部分请求一起发送到 spring 控制器。但我没有使用表单。
HTML
<input id="inputFileToLoad" type="file" onchange="encodeImageFileAsURL()">
JAVA 脚本
window.photoCakeUrl = '<c:url value="/media/image/upload"/>';
function encodeImageFileAsURL() {
var filesSelected = document.getElementById("inputFileToLoad").files;
if (filesSelected.length > 0) {
var fileToLoad = filesSelected[0];
var fileReader = new FileReader();
fileReader.onload = function (fileLoadedEvent) {
var srcData = fileLoadedEvent.target.result; // <--- data: base64
var newImage = document.createElement('img');
var photoCake = srcData;
newImage.src = srcData;
document.getElementById("imgTest").innerHTML = newImage.outerHTML;
var ajax1 = $.ajax({
type: 'POST',
url: photoCakeUrl,
processData: false, // important
contentType: false, // important
dataType: 'json',
data: {photoCak: photoCake}
});
});
},
fileReader.readAsDataURL(fileToLoad);
}
}
弹簧控制器:
@RequestMapping(value = "/media/image/upload", method = RequestMethod.POST)
@ResponseBody
public Map<String, String> productPictureUploadnew(MultipartHttpServletRequest request, HttpServletResponse response) {
Map<String, String> resp = new HashMap<>();
String photoCake = request.getParameter("photoCak");
System.out.println("photoCake " + photoCake);
return resp;
}
但是当我生成 AJAX 调用时,会出现 500 错误。如果我只是使用
public Map<String, String> productPictureUploadnew(HttpServletRequest
request, HttpServletResponse response)
然后就可以了。意思是当我使用 MultipartHttpServletRequest 的地方 HttpServletRequest 请求然后它不起作用。
【问题讨论】:
-
您不是在发送多部分请求,而是在 JSON 对象中发送 base64 编码的文件数据。
-
是的,但我想通过多部分请求发送此数据..
-
然后只需提交包含您的
inputFileToLoad的表单。哦,当然要在表单上设置enctype="multipart/form-data"。 -
但是,我不想使用表单..
-
那你为什么要使用multipart呢?对不起,但我真的不明白你想要达到的目标。显然你有一个工作上传,为什么还要改变它?
标签: javascript java ajax spring multipart