文件上传以及yml的配置

news/2025/2/11 5:48:03/

目录

一、存储本地

二、存储到阿里云

三、配置文件信息


一、存储本地

MultipartFile 常见方法:

  • String getOriginalFilename(); //获取原始文件名

  • void transferTo(File dest); //将接收的文件转存到磁盘文件中

  • long getSize(); //获取文件的大小,单位:字节

  • byte[] getBytes(); //获取文件内容的字节数组

  • InputStream getInputStream(); //获取接收到的文件内容的输入流

 保证每次上传文件时文件名都唯一的(使用UUID获取随机文件名)

 @PostMapping("/upload")public Result upload(String filename, Integer age, MultipartFile image) throws IOException {log.info("文件上传 :{},{},{} ",filename,age,image);// 文件的原始名字String oraginaFilename = image.getOriginalFilename();// 截取后缀String extneme = oraginaFilename.substring(oraginaFilename.lastIndexOf("."));// 名字用uuidString updateNmae = UUID.randomUUID().toString() + extneme;// 将文件保存到本地目录存image.transferTo(new File("D:/XXXX/" + updateNmae));return Result.success();}

二、存储到阿里云

引入阿里云OSS上传文件工具类(由官方的示例代码改造而来)

oss参考文档

package com.demo.tliaswebmanagement.utils;import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.util.UUID;/*** 阿里云 OSS 工具类*/
@Component
public class AliOSSUtils {@Autowiredprivate AliOSSProperties aliOSSProperties;/*** 实现上传图片到OSS*/public String upload(MultipartFile file) throws IOException {// 获取相关信息String endpoint = aliOSSProperties.getEndpoint();String accessKeyId = aliOSSProperties.getAccessKeyId();String accessKeySecret = aliOSSProperties.getAccessKeySecret();String bucketName = aliOSSProperties.getBucketName();// 获取上传的文件的输入流InputStream inputStream = file.getInputStream();// 避免文件覆盖String originalFilename = file.getOriginalFilename();String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));//上传文件到 OSSOSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);ossClient.putObject(bucketName, fileName, inputStream);//文件访问路径String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;// 关闭ossClientossClient.shutdown();return url;// 把上传到oss的路径返回}}

阿里云属性类 

package com.demo.tliaswebmanagement.utils;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Data
@Component
@ConfigurationProperties("aliyun.oss")
public class AliOSSProperties {//区域private String endpoint;// 身份idprivate String accessKeyId;// 身份密钥private String accessKeySecret;// 存储空间private String bucketName ;}

关于以上的这些阿里云相关配置信息,我们是直接写死在java代码中了(硬编码),如果我们在做项目时每涉及到一个第三方技术服务,就将其参数硬编码,那么在Java程序中会存在两个问题:

  1. 如果这些参数发生变化了,就必须在源程序代码中改动这些参数,然后需要重新进行代码的编译,将Java代码编译成class字节码文件再重新运行程序。(比较繁琐)

  2. 如果我们开发的是一个真实的企业级项目, Java类可能会有很多,如果将这些参数分散的定义在各个Java类当中,我们要修改一个参数值,我们就需要在众多的Java代码当中来定位到对应的位置,再来修改参数,修改完毕之后再重新编译再运行。(参数配置过于分散,是不方便集中的管理和维护)

controller类

注入文件上传的工具类

    @Autowiredprivate AliOSSUtils aliOSSUtils;@PostMapping("/upload")public Result upload(MultipartFile file) throws IOException{// 通过工具类oss工具类上传文件并获取urlString url = aliOSSUtils.upload(file);return Result.success(url);}

调试

三、配置文件信息

application.yml的配置信息

#数据库配置
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/tliasusername: rootpassword: 123456servlet:multipart:max-file-size: 10MBmax-request-size: 100MB#mabits配置
mybatis:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImplmap-underscore-to-camel-case: true#oss存储配置
aliyun:oss:endpoint: https://oss-cn-guangzhou.aliyuncs.com  # 阿里云OSS域名 accessKeyId: xxxxxxxxxxxxxxxxx   # 用户身份ID accessKeySecret: xxxxxxxxxxxxxxxxxxxx # 用户密钥 bucketName: web-198 # 存储空间的名字

http://www.ppmy.cn/news/1025519.html

相关文章

四、函数笔记

4.1函数的定义与调用 函数定义 一个函数是需要定义后才能使用 函数定义格式 类型标识符 函数名(形参类型说明表) { 函数体 } 函数的定义包含如下几个部分: 1.函数名: 命名方式与变量名相同,要求符合标识符命名规则 2.函数的参数&…

k8s service

1、认识Service 程序在容器中、容器在Pod中,可以通过pod的ip来访问应用程序,但是podIP会随着创建销毁而改变。由此,Service出现: Service会对提供同一个服务的多个pod进行聚合,并且提供一个统一的入口地址。通过访问…

由于找不到d3dx9_42.dll,无法继续执行代码。重新安装程序可能会解决此问题

d3dx9_42.dll是一个动态链接库文件,它是Microsoft DirectX 9的一部分。这个文件包含了DirectX 9的一些函数和资源,用于支持计算机上运行基于DirectX 9的应用程序和游戏。它通常用于提供图形、音频和输入设备的支持,以及其他与图形和游戏相关的…

Qt扫盲-Qt Model/View 理论总结 [下篇]

Qt Model/View 理论总结 [下篇] 一、处理I tem view 中的选择1. 概念1. 当前项目和已选项目 2. 使用选择 model1. 选择项目2. 读取选区状态3. 更新选区4. 选择 model 中的所有项 二、创建新 model1. 设计一个 model2. 只读示例 model1. model 的尺寸2. model 头和数据 3. 可编辑…

算法与数据结构(二十二)动态规划解题套路框架

动态规划解题套路框架 此文只在个人总结 labuladong 动态规划框架,仅限于学习交流,版权归原作者所有; 动态规划问题(Dynamic Programming)应该是很多读者头疼的,不过这类问题也是最具有技巧性&#xff0c…

江湖游历:Mysql操作内功、面向对象心法兼修秘籍

文章目录 前言一 PyMysql入门二 综合案例2.1 案例需求2.2 DDL定义2.3 实现步骤2.4 参考代码2.4.1 封装数据对象2.4.2 读取文件数据对象2.4.3 连接并写入数据库对象 2.5 1045错误解决 三 今日作业3.1 实现思路3.2 参考代码3.2.1 对象类的封装3.2.2 操作代码 3.3 出现的错误3.3.1…

人大金仓三大兼容:Oracle迁移无忧

企业级应用早期的架构模式是C/S(Client/Server)模式,Client做人机交互逻辑的呈现,Sever做业务计算逻辑的实现。这就类似餐馆的运作模式,Client是前台的服务员提供点菜和上菜服务,而Server则是后厨完成菜品的…

uniapp使用空格占位符无效

uniapp文档&#xff1a; 错误写法&#xff1a; <text>筛 选</text> 正确写法&#xff1a; <text decode>{{ 筛 选 }}</text> //要加decode属性&#xff0c;且内容必须包裹在{{}}