当前位置: 首页 > news >正文

学习笔记--文件上传

本地存储

服务端接受文件

@Slf4j
@RestController
public class UploadController {@PostMapping("/upload")public Result upload(String name,Integer age,MultipartFile file) {log.info("文件上传:{},{},{}",name,age,file);return Result.success();}
}

使用UUID确保保存到本地的文件名不会冲突

@Slf4j
@RestController
public class UploadController {@PostMapping("/upload")public Result upload(String name,Integer age,MultipartFile file) throws IOException {log.info("文件上传:{},{},{}",name,age,file);//获取文件原始名称String originalFilename = file.getOriginalFilename();String newFileName = UUID.randomUUID().toString()+"."+originalFilename.substring(originalFilename.lastIndexOf("."));//保存文件file.transferTo(new File("/home/feitwnd/下载/"+ newFileName));return Result.success();}
}

配置文件上传大小限制

application.yml

spring:servlet:#文件上传配置multipart:#单个文件最大值max-file-size: 10MB#单次请求最大值max-request-size: 100MB

OSS

问题:1.保存在服务器本地磁盘中的文件,在浏览器端无法直接去访问

           2.服务器磁盘容量有限

           3.服务器磁盘坏了就炸了

中小型项目可以使用云服务商提供的相关服务--阿里云对象存储OSS

第三方服务使用思路

OSS使用步骤

文件上传工具类

package cc.feitwnd.utils;import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
import com.aliyun.oss.common.comm.SignVersion;
import org.springframework.stereotype.Component;
import java.io.ByteArrayInputStream;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.UUID;@Component
public class AliyunOSSOperator {private String endpoint = "https://oss-cn-beijing.aliyuncs.com";private String bucketName = "";private String region = "cn-beijing";public String upload(byte[] content, String originalFilename) throws Exception {// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();// 填写Object完整路径,例如202406/1.png。Object完整路径中不能包含Bucket名称。//获取当前系统日期的字符串,格式为 yyyy/MMString dir = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy/MM"));//生成一个新的不重复的文件名String newFileName = UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf("."));String objectName = dir + "/" + newFileName;// 创建OSSClient实例。ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);OSS ossClient = OSSClientBuilder.create().endpoint(endpoint).credentialsProvider(credentialsProvider).clientConfiguration(clientBuilderConfiguration).region(region).build();try {ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(content));} finally {ossClient.shutdown();}return endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + objectName;}}

文件上传控制器

@Slf4j
@RestController
public class UploadController {@Autowiredprivate AliyunOSSOperator aliyunOSSOperator;@PostMapping("/upload")public Result upload(MultipartFile file) throws Exception {log.info("文件上传:{}",file.getOriginalFilename());//将文件交给OSS存储管理String url = aliyunOSSOperator.upload(file.getBytes(),file.getOriginalFilename());log.info("文件访问地址:{}",url);return Result.success(url);}
}

程序优化

利用注解,将这些配置写在yml文件里

    @Value("${aliyun.oss.endpoint}")private String endpoint;@Value("${aliyun.oss.bucket-name}")private String bucketName;@Value("${aliyun.oss.region}")private String region;
aliyun:oss:#阿里云OSS配置endpoint: https://oss-cn-beijing.aliyuncs.combucket-name: xxxxxregion: cn-beijing
@ConfigurationProperties注解,封装配置,一起注入到属性

http://www.dtcms.com/a/478463.html

相关文章:

  • Leetcode 26
  • 淘宝领券网站怎么做上海工程咨询行业协会
  • 泰国网站域名wordpress建网站的优点
  • 解锁 JavaScript 字符串补全魔法:padStart()与 padEnd()
  • Spring Boot 3零基础教程,IOC容器中组件的注册,笔记08
  • TDengine 数学函数 DEGRESS 用户手册
  • 源码:Oracle AWR报告之Top 10 Foreground Events by Total Wait Time
  • 告别繁琐坐标,让公式“说人话”:Excel结构化引用完全指南
  • 【AI论文】CoDA:面向协作数据可视化的智能体系统
  • 从AAAI2025中挑选出对目标检测有帮助的文献——第六期
  • 【深度学习】反向传播
  • 网站开发交接新闻源发稿平台
  • 滴答时钟延时
  • 【C++篇】:ServiceBus RPC 分布式服务总线框架项目
  • 后训练——Post-training技术介绍
  • 获取KeyStore的sha256
  • Linux (5)| 入门进阶:Linux 权限管理的基础规则与实践
  • 常见压缩包格式详解:区别及在不同系统中的解压方式
  • 【数学 进制 数位DP】P9362 [ICPC 2022 Xi‘an R] Find Maximum|普及+
  • .net过滤器和缓存
  • 张家港网站建设培训班电力建设专家答疑在哪个网站
  • 零基础学AI大模型之大模型的“幻觉”
  • 网站快速优化排名排名c语言入门自学零基础
  • MySQL排序规则utf8mb4_0900_ai_ci解析
  • 做网站别名解析的目的是什么同城广告发布平台
  • GPT4Free每日更新的免登录工作AI提供商和模型列表
  • 网站群建设座谈会云浮新增病例详情
  • Proxmox 9 一键更新虚拟机mac
  • C# WPF DataGrid使用Observable<Observable<object>类型作为数据源
  • sem网站建设网站是由多个网页组成的吗