内网网站建设汇报,短视频运营培训学费多少,如何注册百度账号,网站开发如何适应各分辨率文件上传和下载是Web开发中非常基础的功能#xff0c;但在实际开发中#xff0c;我们经常需要实时显示文件上传或下载的进度。这篇文章将介绍如何使用Springboot实现文件上传和下载#xff0c;并为其添加实时进度条的功能。
文件上传
添加Maven依赖项
首先#xff0c;我…文件上传和下载是Web开发中非常基础的功能但在实际开发中我们经常需要实时显示文件上传或下载的进度。这篇文章将介绍如何使用Springboot实现文件上传和下载并为其添加实时进度条的功能。
文件上传
添加Maven依赖项
首先我们需要添加以下Maven依赖项
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId
/dependencydependencygroupIdcommons-fileupload/groupIdartifactIdcommons-fileupload/artifactIdversion1.3.3/version
/dependency其中spring-boot-starter-web是Spring Boot提供的用于构建Web应用程序的依赖项之一commons-fileupload是一个流行的Java文件上传库。
创建HTML表单
接下来我们需要创建一个HTML表单来提交文件。在这个表单中我们可以使用元素来选择要上传的文件并使用元素来提交表单。
!DOCTYPE html
html langen
headmeta charsetUTF-8titleFile Upload/title
/head
bodyform action/upload methodpost enctypemultipart/form-datainput typefile namefile/br/input typesubmit valueUpload//form
/body
/html在这个表单中我们将表单的action属性设置为/upload这是我们将要处理上传请求的URL。
实现文件上传
在Springboot中可以使用org.springframework.web.multipart.MultipartFile类来处理上传的文件。我们可以编写一个Controller来接收并处理上传的文件
RestController
public class UploadController {PostMapping(/upload)public String upload(RequestParam(file) MultipartFile file) throws IOException {// do something with the filereturn success;}
}在上面的代码中我们使用RequestParam注解来指定文件上传的参数名并将文件保存到磁盘或者进行其他操作。最后我们返回一个简单的字符串作为响应内容。
添加进度条
为了实现上传进度条功能我们需要使用JavaScript和Ajax来实现。具体来说我们可以使用XMLHttpRequest对象来发送异步请求并在上传过程中实时更新进度条。
!DOCTYPE html
html langen
headmeta charsetUTF-8titleFile Upload/titlescript srchttps://code.jquery.com/jquery-3.5.1.min.js/scriptscript$(function () {$(form).submit(function (event) {event.preventDefault();var formData new FormData($(this)[0]);$.ajax({xhr: function () {var xhr new window.XMLHttpRequest();xhr.upload.addEventListener(progress, function (evt) {if (evt.lengthComputable) {var percentComplete evt.loaded / evt.total;console.log(percentComplete);$(#progress).css(width, percentComplete * 100 %);}}, false);xhr.addEventListener(progress, function (evt) {if (evt.lengthComputable) {var percentComplete evt.loaded / evt.total;console.log(percentComplete);$(#progress).css(width, percentComplete * 100 %);}}, false);return xhr;},type: POST,url: /upload,data: formData,processData: false,contentType: false,success: function (data) {alert(Upload complete!);}});});});/script
/head
body
forminput typefile namefile/br/button typesubmitUpload/button
/form
div stylebackground-color: #ddd; height: 20px; width: 0%; idprogress/div
/body
/html在上面的代码中我们使用了jQuery来发送XHR请求并在上传过程中更新进度条。具体来说我们为xhr.upload和xhr对象添加了progress事件处理程序以便在上传文件时实时更新进度条。
文件下载
实现文件下载
要实现文件下载我们需要编写一个Controller来处理下载请求并使用org.springframework.core.io.Resource类将文件作为响应内容返回给客户端。
RestController
public class DownloadController {GetMapping(/download)public ResponseEntityResource download() throws IOException {Resource file new FileSystemResource(/path/to/file);HttpHeaders headers new HttpHeaders();headers.add(HttpHeaders.CONTENT_DISPOSITION, attachment; filename file.getFilename());return ResponseEntity.ok().headers(headers).contentLength(file.contentLength()).contentType(MediaType.parseMediaType(application/octet-stream)).body(new InputStreamResource(file.getInputStream()));}
}在上面的代码中我们使用GetMapping注解来指定处理下载请求的URL并使用org.springframework.core.io.Resource类来读取文件内容。最后我们将文件作为响应内容返回给客户端。
添加进度条
添加下载进度条功能与上传进度条类似我们仍然可以使用XMLHttpRequest对象和JavaScript来实现。具体来说我们可以向Controller发送一个异步请求并在下载过程中实时更新进度条。
!DOCTYPE html
html langen
headmeta charsetUTF-8titleFile Download/titlescript srchttps://code.jquery.com/jquery-3.5.1.min.js/scriptscript$(function () {$(#download).click(function (event) {event.preventDefault();var xhr new XMLHttpRequest();xhr.open(GET, /download, true);xhr.responseType blob;xhr.onload function () {if (xhr.status 200) {var contentType xhr.getResponseHeader(Content-Type);var contentDisposition xhr.getResponseHeader(Content-Disposition);var blob new Blob([xhr.response], {type: contentType});var link document.createElement(a);link.href window.URL.createObjectURL(blob);link.download contentDisposition.split()[1];link.click();}};xhr.addEventListener(progress, function (evt) {if (evt.lengthComputable) {var percentComplete evt.loaded / evt.total;console.log(percentComplete);$(#progress).css(width, percentComplete * 100 %);}}, false);xhr.send();});});/script
/head
body
button iddownloadDownload/button
div stylebackground-color: #ddd; height: 20px; width: 0%; idprogress/div
/body
/html在上面的代码中我们使用了jQuery来发送XHR请求并在下载过程中更新进度条。具体来说我们为xhr对象添加了progress事件处理程序以便在文件下载时实时更新进度条。
结论
本文介绍了如何使用Springboot实现文件上传和下载并为其添加实时进度条的功能。在上传和下载文件时我们使用了XMLHttpRequest对象和JavaScript来实现实时进度条。这个功能可以帮助用户更好地了解文件上传和下载的进度提升用户体验。