文件上传(UUID防止重名文件&&阿里云实现云端上传&&MultipartFile接收前端文件)

一、本地存储

MultipartFile 翻译过来就是 "多部分文件对象"。由Spring提供

在 Java 代码中,它是一个接口,代表了客户端上传的一个完整文件。你可以通过它轻松获取文件名、文件大小、文件内容(字节流)等信息,并将其保存到服务器磁盘或云存储中。

java 复制代码
@RestController
@RequestMapping
public class FileUploadController {

    @PostMapping("/upload")
    public Result<String> upload(MultipartFile file) throws IOException {
        //把文件内容存储到本地磁盘
        String originalFilename = file.getOriginalFilename();
        //保证文件的名字是唯一的,从而防止文件覆盖
        originalFilename = UUID.randomUUID().toString()+originalFilename.substring(originalFilename.lastIndexOf("."));
        //本地存储
        file.transferTo(new File("C:\\Users\\c1338\\Desktop\\files\\"+originalFilename));

        return Result.success(url);
    }
}

二、云存储

我们直接参考阿里云官网的api文档制作出相应工具类

java 复制代码
public class AliOssUtil {
    private static final String ENDPOINT = "https://oss-cn-beijing.aliyuncs.com";
    private static final String ACCESS_KEY_ID = "LTAI5tQ8e13igWZUMTjMEEQV";
    private static final String SECRET_ACCESS_KEY = "MffMJoM24sc59SEBEJQDb0cfBVOAC9";
    private static final String BUCKET_NAME = "big-event-gwd";

    //上传文件,返回文件的公网访问地址
    public static String uploadFile(String objectName, InputStream inputStream){
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(ENDPOINT,ACCESS_KEY_ID,SECRET_ACCESS_KEY);
        //公文访问地址
        String url = "";
        try {
            // 创建存储空间。
            ossClient.createBucket(BUCKET_NAME);
            ossClient.putObject(BUCKET_NAME, objectName, inputStream);
            url = "https://"+BUCKET_NAME+"."+ENDPOINT.substring(ENDPOINT.lastIndexOf("/")+1)+"/"+objectName;
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
        return url;
    }
}
相关推荐
子兮曰10 分钟前
Bun 重写为 Rust:11天、64个Claude、16.5万美元,一次改变行业认知的激进实验
前端·后端·bun
子兮曰15 分钟前
Node.js v26.5.0 深度解读:import Text、流式 ReadableStreamTee、以及隐藏的安全加固浪潮
前端·后端·node.js
子兮曰18 分钟前
TypeScript 7.0 RC 深度解读:Go 重写完成,10 倍提速,编译器的「奇点时刻」
前端·后端·typescript
还有多久拿退休金23 分钟前
让飞书知识库跟着 commit 自己长:一套自动化知识库的真实实现
前端·算法·架构
喝拿铁写前端1 小时前
AI 时代,ESLint 应该怎么做得更好
前端·人工智能·代码规范
妙码生花1 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(二十七):管理员登录验证码开关
前端·后端·ai编程
尼斯湖皮皮怪1 小时前
iceCoder 记忆系统深度分析
前端·javascript
用户25577655743001 小时前
Cloudflare Pages 部署 Vite 项目踩坑记
前端
谢尔登1 小时前
通过Semi Design思考前端组件AI化
前端·人工智能
小蚂蚁i2 小时前
把 TypeScript 内置工具类型彻底搞懂,顺便自己封几个好用的
前端·typescript