文件本地和OSS上传

这里写目录标题

前端传出文件

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>上传文件</title>
</head>
<body>               
<form action="/upload" method="post" enctype="multipart/form-data">
   姓名: <input type="text" name="username"><br>
   年龄: <input type="text" name="age"><br>
   头像: <input type="file" name="image"><br>
     <input type="submit" value="提交">
</form>
</body>
</html>

后端本地存储

import org.springframework.web.multipart.MultipartFile;

java 复制代码
@PostMapping(value = "/upload")
public String upload(String username, Integer age,@RequestParam("image") MultipartFile file) throws IOException {
     
     log.info("文件上传:{},{},{}",username,age,file);
     String name=file.getOriginalFilename();
     
     file.transferTo(new File("D:\\images\\"+name));  //存入本地
     return "success";
}

阿里云OSS存储

存储步骤

查找 Endpoint 地址

上传Demo

java 复制代码
import java.io.*;

import com.aliyun.oss.*;
public class Demo {
    public static void main(String[] args)  {
        // 设置 OSS Endpoint 地址
        String endpoint = "https://oss-cn-beijing.aliyuncs.com";

 
        String accessKeyId = "LTAI5tHKDa7NFXnaHWrUkmNs";
        String accessKeySecret = "aeQsl73MlNGDZ2Q3QD7cxES7zt5YVb";

        String bucketName = "k92q-b";  //bucket名字

        //上传后的名称
        String objectName="狗.jpg";

        //上传的文件地址
        String filePatn="C:\\Users\\DELL\\Pictures\\头像背景\\狗.jpg";


        OSS ossClient = new OSSClientBuilder().build(endpoint,accessKeyId,accessKeySecret);


        InputStream inputStream= null;
        try {
            inputStream = new FileInputStream(filePatn);
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        }
        ossClient.putObject(bucketName, objectName, inputStream);
            System.out.println("2. 文件 " + objectName + " 上传成功。");

    }
}

实现上传

java 复制代码
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.util.UUID;

/**
 * 阿里云 OSS 工具类
 */
@Component
public class AliOSSUtils {

    private String endpoint = "https://oss-cn-beijing.aliyuncs.com";
    private String accessKeyId = "LTAI5tHKDa7NFXnaHWrUkmNs";
    private String accessKeySecret = "aeQsl73MlNGDZ2Q3QD7cxES7zt5YVb";
    private String bucketName = "k92q-b";

    /**
     * 实现上传图片到OSS
     */
    public String upload(MultipartFile file) throws IOException {
        // 获取上传的文件的输入流
        InputStream inputStream = file.getInputStream();

        // 避免文件覆盖
        String originalFilename = file.getOriginalFilename();
        String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));

        //上传文件到 OSS
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        ossClient.putObject(bucketName, fileName, inputStream);

        //文件访问路径
        String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;
        // 关闭ossClient
        ossClient.shutdown();
        return url;// 把上传到oss的路径返回
    }
}

接口部分

java 复制代码
@PostMapping(value = "/upload")
    public String upload(String username,Integer age,@RequestParam("image") MultipartFile file){
        String url;
        try {
            url=aliOSSUtils.upload(file);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        System.out.println("成功");
        return url;
    }

@ConfigurationProperties

为了方便修改配置项中的属性

java 复制代码
@Component
@Data          //lombok
@ConfigurationProperties(prefix = "aliyun.oss")
public class AliOSSUtils{
private String endpoint;
    private String accessKeyId;
    private String accessKeySecret;
    private String bucketName;
} 
yaml 复制代码
aliyun:
  oss:
    endpoint: https://oss-cn-beijing.aliyuncs.com
    accessKeyId: LTAI5tHKDa7NFXnaHWrUkmNs
    accessKeySecret: aeQsl73MlNGDZ2Q3QD7cxES7zt5YVb
    bucketName: k92q-b
相关推荐
CHANG_THE_WORLD5 分钟前
深入理解递归:从函数调用到调用栈的完整执行过程
java·开发语言·算法
xexpertS7 分钟前
CI/CD 熔断机制:如何通过编排级熔断器提升开发者效率
java·linux·运维
zy happy1 小时前
VMware虚拟机添加新的硬盘
java·linux·jvm·docker
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题 第192题】【08_Kafka篇】第8题:死信队列是什么?延时队列是什么?
java·kafka·消息队列·死信队列·延时队列
meng半颗糖1 小时前
3.Java流程控制语句
java·开发语言·intellij-idea
大模型码小白1 小时前
企业级检索增强后端集成:Java 服务如何管理知识库版本
java·服务器·开发语言·人工智能·python·microsoft
用户6169182299932 小时前
记录一次死锁检测
java
jvmind_dev2 小时前
1c1g 容器莫名 OOM Killed?排查 Metaspace 持续增长与脚本引擎的坑
java·后端
AI多Agent协作实战派2 小时前
AI多Agent协作系统实战(二十二):从6列到12列——任务监控报告的进化之路
java·人工智能·uni-app·bug
用户3126874877202 小时前
@Transactional 注了等于没用?Spring 事务失效的 7 种场景,你踩过几个
java