javascript - 如何在 JSP 文件中使用 JavaScript、jQuery、Ajax 从前端上传多个图像并将其发送到 Spring Boot Controller?
问题描述
我正在开发一个 Spring Boot Web 应用程序,我想一次上传产品的多个图像以及其他字段(例如产品名称、SKU 代码、类别、标签、子类别等)。我已经为 RESTful API 编写了代码来上传多个图像,它对我来说非常适合。我使用邮递员测试了 API,它工作正常。但是,我不知道如何从前端做到这一点。我在下面向您展示我的前端代码,其中我使用 Ajax 将单个图像发送到我的控制器。
$("#file").change(function(){
var formData = new FormData();
var fileSelect = document.getElementById("file");
if(fileSelect.files && fileSelect.files.length == 1) {
var file = fileSelect.files[0];
formData.set("file",file,file.name);
}else{
$("#file").focus();
return false;
}
var request = new XMLHttpRequest();
try {
request.onreadystatechange=function() {
if(request.readyState==4) {
var v = JSON.parse(request.responseText);
if(v.status==="OK") {
alert("Product Image Uploaded Successfully")
document.getElementById('imagepath').value = v.response;
}
}
}
request.open('POST',"<%=AkApiUrl.testuploadfile%>");
request.send(formData);
} catch(e) {
swal("Unable to connect to server","","error");
}
});
正如我告诉你的,上面的代码是一次发送一个文件。我还向您展示了我的 API 控制器代码:
@RequestMapping(value = AkApiUrl.testuploadfile, method = { RequestMethod.POST, RequestMethod.GET }, produces = {MediaType.APPLICATION_JSON_VALUE }) public ResponseEntity<?> testuploadfile(HttpServletRequest request, @RequestParam("files") MultipartFile[] files) {
CustomResponse = ResponseFactory.getResponse(request);
String imgurl = "NA";
try {
String path = Constants.webmedia;
String relativepath = "public/media/";
System.out.println("Here is the image: ");
List<MultipartFile> multifile = Arrays.asList(files);
if( null != multifile && multifile.size()>0) {
for (int i=0; i < multifile.size(); i++) {
String filename = files[i].getOriginalFilename();
String extension = filename.substring(filename.lastIndexOf("."), filename.length());
int r = (int )(Math.random() * 500 + 1);
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddhhmmss");
Date date = new Date();
String formatdate = format.format(date);
formatdate = "ECOM" + formatdate + r;
byte[] bytes = files[i].getBytes();
BufferedOutputStream stream = new BufferedOutputStream( new FileOutputStream(new File(path + File.separator + formatdate + extension)));
stream.write(bytes);
stream.flush();
stream.close();
String newimgurl = relativepath + formatdate + extension;
imgurl = imgurl+"##"+newimgurl;
if(imgurl != null) {
CustomResponse.setResponse(imgurl);
CustomResponse.setStatus(CustomStatus.OK);
CustomResponse.setStatusCode(CustomStatus.OK_CODE);
}
}
}
} catch (Exception e) {
e.printStackTrace();
CustomResponse.setResponse(null);
CustomResponse.setStatus(CustomStatus.Error);
CustomResponse.setStatusCode(CustomStatus.Error_CODE);
CustomResponse.setResponseMessage(CustomStatus.ErrorMsg);
}
return new ResponseEntity<ResponseDao>(CustomResponse, HttpStatus.OK);
}
这个 API 工作正常,我得到了想要的响应。但是我不知道我应该如何在JSP页面上实现这个东西。请,任何建议将不胜感激。
解决方案
推荐阅读
- excel - 通过 Powershell 使用自定义颜色填充 Excel 单元格
- javascript - Binding mouse events to a-frame objects
- html - Vim osx html highlights
- shiny - Reduce space between widgets
- javascript - Creating new javascript object array of unique values based on another object array
- netlogo - netlogo 函数是否可以接受可变长度的参数?
- protocol-buffers - 在应用程序中一起使用 nanopb 和 protobuf 进行序列化/反序列化
- facebook - 在 Facebook 上分享时如何使用带有瑞典语 åäö 的 IDN 域?
- python - 如果在 while 循环和 for 循环中按下按钮,则发送 elem.click()
- python - 如何根据 Pandas 中的其他 df 创建特定的 DataFrame?