wordpress 站点维护,深圳关键词快速排名,预装wordpress云主机,网站是怎么优化的说到文件上传和下载#xff0c;相信每个开发者都有或多或少的接触过文件上传的功能吧#xff0c;文件上传和下载是我们在学习计算机网络应用常见的一个功能#xff0c;主要涉及到用户和服务器之间的数据传输。
我们来对文件上传和下载功能的进行相关概述吧#xff01;
文…说到文件上传和下载相信每个开发者都有或多或少的接触过文件上传的功能吧文件上传和下载是我们在学习计算机网络应用常见的一个功能主要涉及到用户和服务器之间的数据传输。
我们来对文件上传和下载功能的进行相关概述吧
文件上传
定义文件上传是指用户将本地计算机上的文件通过网络传输到服务器的过程。用户通常通过网页表单选择文件并提交服务器接收并存储该文件。
过程
用户选择文件用户在网页上选择要上传的文件通常通过一个文件输入框input typefile。表单提交用户点击提交按钮浏览器将文件和其他表单数据一起发送到服务器。HTTP请求浏览器发起一个HTTP POST请求包含文件数据和其他表单字段。服务器接收文件 服务器接收到请求后解析请求体中的文件数据。服务器将文件存储在指定的目录中。 反馈结果服务器处理完上传后通常会返回一个响应告知用户上传是否成功。
文件下载
定义文件下载是指用户从服务器获取文件并保存到本地计算机的过程。用户通常通过点击链接或按钮来触发下载。
过程
用户请求下载用户在网页上点击下载链接或按钮触发下载请求。HTTP请求浏览器发起一个HTTP GET请求请求特定的文件。服务器处理请求 服务器接收到请求后查找请求的文件。服务器将文件内容写入HTTP响应体并设置适当的响应头如Content-Disposition以指示浏览器下载文件而不是直接显示。 浏览器接收文件浏览器接收到响应后开始下载文件并提示用户选择保存位置。文件保存用户选择保存位置后文件被下载到本地计算机。
文件上传和下载的关键步骤
在文件上传和下载的过程中涉及以下关键步骤
用户界面提供文件选择和下载的用户界面HTML表单。HTTP请求使用适当的HTTP方法POST用于上传GET用于下载发送请求。请求处理服务器端代码处理请求解析文件数据上传或查找文件下载。文件存储在上传过程中将文件存储在服务器的指定位置。响应返回服务器返回处理结果上传成功/失败或文件内容下载。错误处理处理可能出现的错误如文件大小限制、文件类型验证、文件不存在等。
在SpringMVC中实现一个文件上传和下载的功能
第一步创建我们的文件项目目录结构
src└── main├── java│ └── com│ └── example│ └── fileupload│ ├── FileUploadController.java│ └── WebConfig.java├── resources│ └── templates│ └── upload.html└── web.xml第二步添加相关依赖
dependenciesdependencygroupIdorg.springframework/groupIdartifactIdspring-webmvc/artifactIdversion5.3.10/version/dependencydependencygroupIdorg.thymeleaf/groupIdartifactIdthymeleaf-spring5/artifactIdversion3.0.12.RELEASE/version/dependencydependencygroupIdjavax.servlet/groupIdartifactIdjavax.servlet-api/artifactIdversion4.0.1/versionscopeprovided/scope/dependency
/dependencies
第三步创建我们的Web配置类用来监听相关信息 在WebConfig.java中配置Spring MVC
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.thymeleaf.spring5.SpringTemplateEngine;
import org.thymeleaf.spring5.view.ThymeleafViewResolver;Configuration
EnableWebMvc
public class WebConfig implements WebMvcConfigurer {Beanpublic ViewResolver viewResolver(SpringTemplateEngine templateEngine) {ThymeleafViewResolver resolver new ThymeleafViewResolver();resolver.setTemplateEngine(templateEngine);resolver.setCharacterEncoding(UTF-8);resolver.setOrder(1);return resolver;}Beanpublic CommonsMultipartResolver multipartResolver() {CommonsMultipartResolver multipartResolver new CommonsMultipartResolver();multipartResolver.setMaxUploadSize(10485760); // 10MBreturn multipartResolver;}Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler(/uploads/**).addResourceLocations(file:uploads/);}
}创建控制器
在FileUploadController.java中实现文件上传和下载的逻辑
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;Controller
public class FileUploadController {private final String uploadDir uploads/;GetMapping(/)public String index() {return upload;}PostMapping(/upload)public String uploadFile(RequestParam(file) MultipartFile file, RedirectAttributes redirectAttributes) {if (file.isEmpty()) {redirectAttributes.addFlashAttribute(message, 请选择一个文件上传);return redirect:/;}try {// 保存文件File dir new File(uploadDir);if (!dir.exists()) {dir.mkdirs();}File uploadedFile new File(uploadDir file.getOriginalFilename());file.transferTo(uploadedFile);redirectAttributes.addFlashAttribute(message, 文件上传成功 file.getOriginalFilename());} catch (IOException e) {redirectAttributes.addFlashAttribute(message, 文件上传失败 e.getMessage());}return redirect:/;}GetMapping(/download)public void downloadFile(RequestParam(filename) String filename, HttpServletResponse response) {File file new File(uploadDir filename);if (file.exists()) {response.setContentType(application/octet-stream);response.setHeader(Content-Disposition, attachment; filename\ filename \);try (FileInputStream in new FileInputStream(file);OutputStream out response.getOutputStream()) {byte[] buffer new byte[1024];int bytesRead;while ((bytesRead in.read(buffer)) ! -1) {out.write(buffer, 0, bytesRead);}} catch (IOException e) {e.printStackTrace();}} else {response.setStatus(HttpServletResponse.SC_NOT_FOUND);}}
}第五步创建HTML模板
!DOCTYPE html
html xmlns:thhttp://www.thymeleaf.org
headtitle文件上传/title
/head
body
h1文件上传/h1form methodpost enctypemultipart/form-data th:action{/upload}input typefile namefile required/button typesubmit上传/button
/formdiv th:if${message} th:text${message}/divh2下载文件/h2
form methodget th:action{/download}input typetext namefilename placeholder输入文件名 required/button typesubmit下载/button
/form
/body
/html最后一步配置web.xml文件
web-app xmlnshttp://xmlns.jcp.org/xml/ns/javaee xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsdversion3.1servletservlet-namedispatcher/servlet-nameservlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-classload-on-startup1/load-on-startup/servletservlet-mappingservlet-namedispatcher/servlet-nameurl-pattern//url-pattern/servlet-mappingcontext-paramparam-namecontextConfigLocation/param-nameparam-value/WEB-INF/applicationContext.xml/param-value/context-paramlistenerlistener-classorg.springframework.web.context.ContextLoaderListener/listener-class/listener/web-app14:18:08.583 [http-nio-8008-exec-6] DEBUG org.springframework.web.servlet.DispatcherServlet - POST /SpringMVC/upload, parameters{}
14:18:08.595 [http-nio-8008-exec-6] DEBUG org.springframework.web.multipart.commons.CommonsMultipartResolver - Part file, size 719635 bytes, filename白底logo.png
14:18:08.596 [http-nio-8008-exec-6] DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped to com.miaow.controller.FileUploadController#uploadFile(MultipartFile, RedirectAttributes)
14:18:08.600 [http-nio-8008-exec-6] DEBUG org.springframework.web.multipart.commons.CommonsMultipartFile - Part file, filename 白底logo.png: moved to [D:\IDEATomcat\apache-tomcat-9.0.89-windows-x64\apache-tomcat-9.0.89\bin\uploads\白底logo.png]
14:18:08.600 [http-nio-8008-exec-6] DEBUG org.springframework.web.servlet.view.RedirectView - View name redirect:, model {}
14:18:08.601 [http-nio-8008-exec-6] DEBUG org.springframework.web.multipart.commons.CommonsMultipartResolver - Cleaning up part file, filename 白底logo.png
14:18:08.601 [http-nio-8008-exec-6] DEBUG org.springframework.web.servlet.DispatcherServlet - Completed 302 FOUND
14:18:08.608 [http-nio-8008-exec-5] DEBUG org.springframework.web.servlet.DispatcherServlet - GET /SpringMVC/, parameters{}
14:18:08.608 [http-nio-8008-exec-5] DEBUG org.springframework.web.servlet.handler.SimpleUrlHandlerMapping - Mapped to ParameterizableViewController [viewindex]
14:18:08.610 [http-nio-8008-exec-5] DEBUG org.springframework.web.servlet.DispatcherServlet - Completed 200 OK
14:18:12.924 [http-nio-8008-exec-10] DEBUG org.springframework.web.servlet.DispatcherServlet - GET /SpringMVC/upload, parameters{}
14:18:12.924 [http-nio-8008-exec-10] DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped to com.miaow.controller.FileUploadController#index()
14:18:12.925 [http-nio-8008-exec-10] DEBUG org.springframework.web.servlet.DispatcherServlet - Completed 200 OK上传成功日志。
下载成功日志
14:19:16.956 [http-nio-8008-exec-9] DEBUG org.springframework.web.servlet.DispatcherServlet - GET /SpringMVC/download?filenameviolet.webp, parameters{masked}
14:19:16.956 [http-nio-8008-exec-9] DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped to com.miaow.controller.FileUploadController#downloadFile(String, HttpServletResponse)
14:19:16.958 [http-nio-8008-exec-9] DEBUG org.springframework.web.servlet.DispatcherServlet - Completed 200 OK