springMVC+ajax implements file upload with progress bar instances
- 2020-05-30 20:18:31
- OfStack
Front-end code:
<form id= "uploadForm">
<p > Specified file name: <input type="text" name="filename" value= ""/></p >
<p > Upload file: <input type="file" name="file"/></ p>
<input type="button" value=" upload " onclick="doUpload()" />
</form>
function doUpload() {
var formData = new FormData($( "#uploadForm" )[0]);
$.ajax({
url: 'http://localhost:8080/xiaochangwei/file/upload' ,
type: 'POST',
data: formData,
async: false,
cache: false,
contentType: false,
processData: false,
success: function (returndata) {
alert(returndata);
},
error: function (returndata) {
alert(returndata);
}
});
}
The backend:
@RequestMapping(value = "/upload", method = RequestMethod.POST)
public String upload(HttpServletRequest request, @RequestParam("file") MultipartFile file, ModelMap model) {
System.out.println(" start ");
String path = request.getSession().getServletContext().getRealPath("upload");
String fileName = file.getOriginalFilename();
// String fileName = new Date().getTime()+".jpg";
System.out.println(path);
File targetFile = new File(path, fileName);
if (!targetFile.exists()) {
targetFile.mkdirs();
}
// save
try {
file.transferTo(targetFile);
} catch (Exception e) {
e.printStackTrace();
}
model.addAttribute("fileUrl", request.getContextPath() + "/upload/" + fileName);
return "result";
}
If the front end has a lot of entity class data submitted with file 1
The back-end method can be modified as follows:
upload(HttpServletRequest request, @RequestParam("file") MultipartFile file, ModelMap model,User user)
Use the following code to upload files with progress bars
<script type="text/javascript">
function UpladFile() {
var fileObj = document.getElementById("file").files[0]; // js Get file object
var FileController = "http://localhost:8080/xiaochangwei/file/upload"; // The background address to receive the uploaded file
// FormData object
var form = new FormData($( "#uploadForm" )[0]);
// XMLHttpRequest object
var xhr = new XMLHttpRequest();
xhr.open("post", FileController, true);
xhr.onload = function () {
// alert(" Upload to complete !");
};
xhr.upload.addEventListener("progress", progressFunction, false);
xhr.send(form);
}
function progressFunction(evt) {
var progressBar = document.getElementById("progressBar");
var percentageDiv = document.getElementById("percentage");
if (evt.lengthComputable) {
progressBar.max = evt.total;
progressBar.value = evt.loaded;
percentageDiv.innerHTML = Math.round(evt.loaded / evt.total * 100) + "%";
if(evt.loaded==evt.total){
alert(" Upload to complete 100%");
}
}
}
</script>
<progress id="progressBar" value="0" max="100"></progress>
<form id= "uploadForm">
<input type="file" id="file" name="myfile" />
<input type="button" onclick="UpladFile()" value=" upload " />
</form>