纺织面料做哪个网站好,个人网页设计作品html,wordpress在线查询系统,江苏和城乡建设部网站首页文件上传#xff0c;是指将本地图片、视频、音频等文件上传到服务器#xff0c;供其他用户浏览或下载的过程。 文件上传前端需要完成的准备#xff1a; 需要提交一个form表单#xff0c;表单必须包含以下三点#xff08;上传文件页面三要素#xff09; … 文件上传是指将本地图片、视频、音频等文件上传到服务器供其他用户浏览或下载的过程。 文件上传前端需要完成的准备 需要提交一个form表单表单必须包含以下三点上传文件页面三要素 1.必须具有file域file域是用于选择需要上传的文件 input typefile nameimage/ 2.表单的提交方式必须为post --因为通常上传的文件相对较大所以说需要使用post的方式提交 3.表单的编码类型enctype必须为multipart/form-data 因为默认的编码格式是不适合传输大型的二进制文件的----假如说使用默认的编码传输的并不是文件的内容而是文件名 所以说在文件上传的时候enctype的编码必须设置为multipart/form-data这样才可以正确的传输文件到服务端 文件上传后端需要完成的准备 1.先在服务端定义一个controller用于文件上传然后在controller中定义一个方法处理/upload请求 2.在定义的方法中接收提交过来的数据方法中的形参名和请求参数的名字保持一致----Spring中提供了一个APIMultipartFile 这个API可以用来接收上传的文件。MultiPartFile需要定义在方法的参数列表中并且其实体类名必须和前端file域的名字相同 若表单项的名字和方法中的形参名不一样怎么办 可以使用RequestParam注解进行参数绑定虽然可以完成需求但是建议将二者的名字写成一样的 UploadController
package com.wzb.UploadController20241008;import com.wzb.pojo20241008.Result;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import java.io.File;
import java.io.IOException;
import java.util.UUID;RestController
public class UploadController {// PostMapping(/upload)
// public Result upload(String userName, Integer age, MultipartFile image) {
// // Spring提供的上传文件的APIMultipartFile必须在方法参数中声明并且实体类名必须和表单名相同
// System.out.println(文件上传);
// return Result.success();
//
// }// 文件若只是单纯的上传不做处理那么在文件上传之后会将表单提交的数据分别存储在不同的临时文件中.tmp当// 程序运行完毕之后.tmp临时文件将自动删除这不符合文件上传的需求也许需要将文件本地存储// 将前端页面上传的文件在服务器本地存储
// 1.在服务器本地磁盘中创建一个目录用于存储上传的文件
// 2.使用MultipartFile中的方法将临时文件转存到本地磁盘的目录下
// -- MultipartFile的常见方法
// String getOriginalFilename() 获取原始的文件名
// void transferTo(File dest) 将接收的文件转存到本地磁盘的指定位置
// long getSize() 获取文件的大小 单位字节
// byte[] getBytes() 获取文件内容的字节数组
// InputStream getInputStream() 获取接收到的文件内容的输入流// PostMapping(/upload)
// public Result upload(String username, Integer age, MultipartFile image) throws IOException {
// System.out.println(文件上传测试);
// // 获取原始的文件名
// String originalFileName image.getOriginalFilename();
// // 将文件存储在服务器的本地磁盘目录
// image.transferTo(new File(E:/images/ originalFileName));
// // 响应结果
// return Result.success();
// }// 发现成功上传了一个文件并且能够成功的保存在服务器的本地但是存在一个问题————上传单个文件是没有问题的但是// 若上传了多个文件存在同名的文件那么后上传的文件就会将本地已经存在的文件覆盖掉这不符合需求// 解决上传同名文件的文件覆盖问题保证每次上传文件时文件名都是唯一的使用UUID获取随机的文件名PostMapping(/upload)public Result upload(String username, Integer age, MultipartFile image) throws IOException {System.out.println(文件上传);// 获取原始文件名————此处获取原始文件名只是为了获得文件的类型String originalFileName image.getOriginalFilename();// 通过UUID构建新的文件名随机的UUID作为文件名通过原始文件名得到文件类型二者拼接可以得到新的文件名String externalName .txt; // 默认是文本文档if (originalFileName ! null) {externalName originalFileName.substring(originalFileName.lastIndexOf(.));// 这个substring截取的意思是从最后一个.开始截取所以说这就是文件扩展名}String newFileName UUID.randomUUID().toString() externalName;// 将UUID为文件名的文件存储到服务器的磁盘目录image.transferTo(new File(E:/images/ newFileName));// 响应return Result.success();}// 使用UUID改造文件名可以成功解决文件名重复替代的问题但是发现上传一个较大的文件时超过1M后端程序报错// 原因SpringBoot中配置了文件上传时单个文件最大大小是1M// 想要上传大文件需要在application.properties中进行配置// 本地存储到此处就完成了但是将上传的文件存储到服务器本地是不会使用的// 1.在服务器本地存储的资源不能直接访问// 2.服务器磁盘资源珍贵不适合存储大量无用的文件// 3.服务器集群方式不方便扩容磁盘满了难以扩容// 4.磁盘坏了就直接寄// 所以说为了解决文件本地存储的问题可以使用云存储
}Result响应结果类
package com.wzb.pojo20241008;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;Data
NoArgsConstructor
AllArgsConstructor
public class Result {private Integer code; // 响应码1是响应成功2是响应失败private String message; // 响应信息描述响应结果的字符串private Object data; // 响应返回的数据// 响应成功但不返回数据的方法public static Result success() {return new Result(1, success, null);}// 响应成功并且返回数据的方法public static Result success(Object data) {return new Result(1,success, data);}// 响应失败的方法public static Result fail(String message) {return new Result(0, message, null);}
}