文件本地和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
相关推荐
m0_748251356 分钟前
解决 Tomcat 跨域问题 - Tomcat 配置静态文件和 Java Web 服务(Spring MVC Springboot)同时允许跨域
java·前端·spring
工业互联网专业12 分钟前
基于springboot+vue的餐饮连锁店管理系统的设计与实现
java·vue.js·spring boot·毕业设计·源码·课程设计
初学者丶一起加油12 分钟前
C语言基础:指针(常量指针和指针常量)
java·linux·c语言·开发语言·算法·ubuntu·visualstudio
NullPointerExpection22 分钟前
java 使用 poi 对指定 excel 的指定多列进行从左到右树形行合并
java·开发语言·excel·poi
ccmjga26 分钟前
升级 Spring Boot 3 配置讲解 —— 如何在 Spring Boot 3 中接入生成式 AI?
java·人工智能·spring boot·后端·docker·面试·单元测试
zhulangfly28 分钟前
【Java设计模式-1】单例模式,Java世界的“独苗”
java·单例模式·设计模式
Leaf吧31 分钟前
java设计模式 单例模式
java·单例模式·设计模式
HappyAcmen1 小时前
关于Java抽象工厂模式的面试题目及其答案
java·面试·抽象工厂模式
深鱼~1 小时前
【多线程初阶篇 ²】创建线程的方式
java·开发语言·jvm·深度学习·神经网络·opencv
相隔一个图书馆的距离1 小时前
netty系列(五)IdleStateHandler和IdleStateHandlerEventState
java·netty·idlehandler