springMVC+ajax 文件上传 带进度条

今天药忘吃喽~ 2022-05-30 09:30 375阅读 0赞

转自:https://www.cnblogs.com/xiaochangwei/p/5239104.html

前端代码:

复制代码

  1. <form id= "uploadForm">
  2. <p >指定文件名: <input type="text" name="filename" value= ""/></p >
  3. <p >上传文件: <input type="file" name="file"/></ p>
  4. <input type="button" value="上传" οnclick="doUpload()" />
  5. </form>
  6. function doUpload() {
  7. var formData = new FormData($( "#uploadForm" )[0]);
  8. $.ajax({
  9. url: 'http://localhost:8080/xiaochangwei/file/upload' ,
  10. type: 'POST',
  11. data: formData,
  12. async: false,
  13. cache: false,
  14. contentType: false,
  15. processData: false,
  16. success: function (returndata) {
  17. alert(returndata);
  18. },
  19. error: function (returndata) {
  20. alert(returndata);
  21. }
  22. });
  23. }

复制代码

后端:

复制代码

  1. @RequestMapping(value = "/upload", method = RequestMethod.POST)
  2. public String upload(HttpServletRequest request, @RequestParam("file") MultipartFile file, ModelMap model) {
  3. System.out.println("开始");
  4. String path = request.getSession().getServletContext().getRealPath("upload");
  5. String fileName = file.getOriginalFilename();
  6. // String fileName = new Date().getTime()+".jpg";
  7. System.out.println(path);
  8. File targetFile = new File(path, fileName);
  9. if (!targetFile.exists()) {
  10. targetFile.mkdirs();
  11. }
  12. // 保存
  13. try {
  14. file.transferTo(targetFile);
  15. } catch (Exception e) {
  16. e.printStackTrace();
  17. }
  18. model.addAttribute("fileUrl", request.getContextPath() + "/upload/" + fileName);
  19. return "result";
  20. }

复制代码

如果前端有很多实体类数据同文件一同提交

可以修改后端方法为:

  1. upload(HttpServletRequest request, @RequestParam("file") MultipartFile file, ModelMap model,User user)

利用下面的代码更可实现带有进度条的文件上传

复制代码

  1. <script type="text/javascript">
  2. function UpladFile() {
  3. var fileObj = document.getElementById("file").files[0]; // js 获取文件对象
  4. var FileController = "http://localhost:8080/xiaochangwei/file/upload"; // 接收上传文件的后台地址
  5. // FormData 对象
  6. var form = new FormData($( "#uploadForm" )[0]);
  7. // XMLHttpRequest 对象
  8. var xhr = new XMLHttpRequest();
  9. xhr.open("post", FileController, true);
  10. xhr.onload = function () {
  11. // alert("上传完成!");
  12. };
  13. xhr.upload.addEventListener("progress", progressFunction, false);
  14. xhr.send(form);
  15. }
  16. function progressFunction(evt) {
  17. var progressBar = document.getElementById("progressBar");
  18. var percentageDiv = document.getElementById("percentage");
  19. if (evt.lengthComputable) {
  20. progressBar.max = evt.total;
  21. progressBar.value = evt.loaded;
  22. percentageDiv.innerHTML = Math.round(evt.loaded / evt.total * 100) + "%";
  23. if(evt.loaded==evt.total){
  24. alert("上传完成100%");
  25. }
  26. }
  27. }
  28. </script>
  29. <br />
  30. <br />
  31. <br />
  32. <br />
  33. <progress id="progressBar" value="0" max="100"></progress>
  34. <span id="percentage"></span>
  35. <br />
  36. <br />
  37. <br />
  38. <br />
  39. <form id= "uploadForm">
  40. <input type="file" id="file" name="myfile" />
  41. <input type="button" onclick="UpladFile()" value="上传" /> </form>

发表评论

表情:
评论列表 (有 0 条评论,375人围观)

还没有评论,来说两句吧...

相关阅读

    相关 ajax 文件进度

    一:方案分析        基于浏览器的文件上传,为了有更好的用户体验,我们一般就设置一个旋转的图标,旋转的图标无法实时的监控文件上传情况。所以我们将实现一个如何实时的监控