• 七牛云 OSS 文件上传demo


    本博文使用七牛云对象存储实现文件上传功能。

    环境说明

    Jdk1.8

    Maven3.6.3

    IDEA2022

    OSS简介

    OSS的英文全称是Object Storage Service,翻译成中文就是对象存储服务。OSS非常适合存储静态资源,提供HTTP链接的方式来访问到静态资源,例如图片,减轻业务服务器存储静态文件的压力。

    这里选择七牛云 对象存储服务来实现OSS功能。

    准备工作

    注册登录七牛云:七牛云 | 一站式场景化智能视频云

    新建存储空间:

    新建密钥:

    点击头像-->个人中心

     密钥管理-->创建密钥,得到AK和SK,后面编码有用。

    七牛云文档地址:Java SDK_SDK 下载_对象存储 - 七牛开发者中心

    最简单的就是上传本地文件案例: 

    数据流上传案例:

    步骤

    新建SpringBoot工程

    新建springboot工程qiniuyundemo

    依赖如下:

    1. <dependencies>
    2. <dependency>
    3. <groupId>org.springframework.bootgroupId>
    4. <artifactId>spring-boot-starterartifactId>
    5. dependency>
    6. <dependency>
    7. <groupId>org.springframework.bootgroupId>
    8. <artifactId>spring-boot-starter-webartifactId>
    9. dependency>
    10. <dependency>
    11. <groupId>org.springframework.bootgroupId>
    12. <artifactId>spring-boot-starter-testartifactId>
    13. <scope>testscope>
    14. dependency>
    15. <dependency>
    16. <groupId>com.qiniugroupId>
    17. <artifactId>qiniu-java-sdkartifactId>
    18. <version>[7.7.0, 7.10.99]version>
    19. dependency>
    20. dependencies>

    1.实现简单的文件上传

    新建包:

    在启动程序QiniuyundemoApplication.java所在的包下新建一个upload包

    新建类:

    在upload包下,新建Upload类,实现简单的文件上传,完整代码如下:

    1. package com.example.qiniuyundemo.upload;
    2. import com.qiniu.common.QiniuException;
    3. import com.qiniu.http.Response;
    4. import com.qiniu.storage.Configuration;
    5. import com.qiniu.storage.Region;
    6. import com.qiniu.storage.UploadManager;
    7. import com.qiniu.storage.model.DefaultPutRet;
    8. import com.qiniu.util.Auth;
    9. /**
    10. * 文件上传
    11. */
    12. public class Upload {
    13. public static void main(String[] args) {
    14. //构造一个带指定 Region 对象的配置类
    15. Configuration cfg = new Configuration(Region.region2());
    16. cfg.resumableUploadAPIVersion = Configuration.ResumableUploadAPIVersion.V2;// 指定分片上传版本
    17. //...其他参数参考类注释
    18. UploadManager uploadManager = new UploadManager(cfg);
    19. //...生成上传凭证,然后准备上传
    20. String accessKey = "xxxxxxxx";//xxxxxxxx换成七牛云的AK密钥
    21. String secretKey = "xxxxxxxx";//xxxxxxxx换成七牛云的SK密钥
    22. String bucket = "xxxxxxxx";//xxxxxxxx换成七牛云的空间名称
    23. //指定需要上传的文件路径
    24. String localFilePath = "D:\\testpic\\bdd2.jpeg";
    25. //默认不指定key的情况下,以文件内容的hash值作为文件名
    26. String key = null;
    27. Auth auth = Auth.create(accessKey, secretKey);
    28. String upToken = auth.uploadToken(bucket);
    29. try {
    30. Response response = uploadManager.put(localFilePath, key, upToken);
    31. //解析上传成功的结果
    32. // DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
    33. // System.out.println(putRet.key);
    34. // System.out.println(putRet.hash);
    35. System.out.println(response);
    36. } catch (QiniuException ex) {
    37. Response r = ex.response;
    38. System.err.println(r.toString());
    39. try {
    40. System.err.println(r.bodyString());
    41. } catch (QiniuException ex2) {
    42. //ignore
    43. }
    44. }
    45. }
    46. }

    运行Upload代码,结果如下:

     查看七牛云的空间管理-->选择需要查看的空间名称-->点击文件管理,查看到上传的文件,如下:

    2.配合前端实现文件上传

    新建包,新建类,新建前端目录及文件,最终目录结构如下:

     代码如下:

    控制类

    1. package com.example.qiniuyundemo.controller;
    2. import com.example.qiniuyundemo.service.UploadService;
    3. import org.springframework.beans.factory.annotation.Autowired;
    4. import org.springframework.stereotype.Controller;
    5. import org.springframework.web.bind.annotation.RequestMapping;
    6. import org.springframework.web.bind.annotation.ResponseBody;
    7. import org.springframework.web.multipart.MultipartFile;
    8. import java.io.IOException;
    9. import java.time.LocalDateTime;
    10. import java.time.format.DateTimeFormatter;
    11. @Controller
    12. public class UploadController {
    13. @Autowired
    14. UploadService uploadService;
    15. @RequestMapping("/upload")
    16. @ResponseBody
    17. public String upload(MultipartFile file) throws IOException {
    18. String filename = file.getOriginalFilename();
    19. String date = DateTimeFormatter.ofPattern("yyyy/MM/dd/").format(LocalDateTime.now());
    20. filename = date + System.currentTimeMillis()+filename.substring(filename.lastIndexOf("."));
    21. return uploadService.upload(file.getInputStream(), filename);
    22. }
    23. }

    服务接口类

    1. package com.example.qiniuyundemo.service;
    2. import java.io.InputStream;
    3. public interface UploadService {
    4. /**
    5. * 上传服务
    6. * @param inputStream
    7. * @param fileName
    8. * @return
    9. */
    10. String upload(InputStream inputStream, String fileName);
    11. }

    服务实现类

    参照文档的数据流上传代码

    1. package com.example.qiniuyundemo.service.impl;
    2. import com.example.qiniuyundemo.service.UploadService;
    3. import com.qiniu.common.QiniuException;
    4. import com.qiniu.http.Response;
    5. import com.qiniu.storage.Configuration;
    6. import com.qiniu.storage.Region;
    7. import com.qiniu.storage.UploadManager;
    8. import com.qiniu.storage.model.DefaultPutRet;
    9. import com.qiniu.util.Auth;
    10. import org.springframework.stereotype.Service;
    11. import java.io.ByteArrayInputStream;
    12. import java.io.InputStream;
    13. import java.io.UnsupportedEncodingException;
    14. /**
    15. * 上传服务实现类
    16. */
    17. @Service
    18. public class UploadServiceImpl implements UploadService {
    19. @Override
    20. public String upload(InputStream inputStream, String fileName) {
    21. //构造一个带指定 Region 对象的配置类
    22. Configuration cfg = new Configuration(Region.region2());
    23. cfg.resumableUploadAPIVersion = Configuration.ResumableUploadAPIVersion.V2;// 指定分片上传版本
    24. //...其他参数参考类注释
    25. UploadManager uploadManager = new UploadManager(cfg);
    26. //...生成上传凭证,然后准备上传
    27. String accessKey = "xxxxxxxx";//xxxxxxxx换成七牛云的AK密钥
    28. String secretKey = "xxxxxxxx";//xxxxxxxx换成七牛云的SK密钥
    29. String bucket = "xxxxxxxx";//xxxxxxxx换成七牛云的空间名称
    30. //默认不指定key的情况下,以文件内容的hash值作为文件名
    31. String key = fileName;
    32. String result = null;
    33. try {
    34. // byte[] uploadBytes = "hello qiniu cloud".getBytes("utf-8");
    35. // ByteArrayInputStream byteInputStream=new ByteArrayInputStream(uploadBytes);
    36. Auth auth = Auth.create(accessKey, secretKey);
    37. String upToken = auth.uploadToken(bucket);
    38. try {
    39. Response response = uploadManager.put(inputStream,key,upToken,null, null);
    40. //解析上传成功的结果
    41. // DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
    42. // System.out.println(putRet.key);
    43. // System.out.println(putRet.hash);
    44. if(response.statusCode==200){
    45. result = "http://xxxxxxx.com/"+ fileName;//http://xxxxxxx.com/换成七牛云提供的测试域名或者空间绑定的域名
    46. }
    47. } catch (QiniuException ex) {
    48. Response r = ex.response;
    49. System.err.println(r.toString());
    50. try {
    51. System.err.println(r.bodyString());
    52. } catch (QiniuException ex2) {
    53. //ignore
    54. }
    55. }
    56. } catch (Exception ex) {
    57. //ignore
    58. }
    59. return result;
    60. }
    61. }

    upload.html文件

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta name="viewport"
    6. content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    7. <meta http-equiv="X-UA-Compatible" content="ie=edge">
    8. <title>OOS文件上传title>
    9. head>
    10. <body>
    11. <form method="post" action="/upload" enctype="multipart/form-data">
    12. <input type="file" name="file" />
    13. <br/>
    14. <input type="submit" value="提交"/>
    15. form>
    16. body>
    17. html>

    修改Springboot上传文件大小配置

    application.properties

    1. spring.servlet.multipart.max-file-size=10MB
    2. spring.servlet.multipart-request-size=100MB

    运行QiniuyundemoApplication类

    测试

    浏览器访问

    http://localhost:8080/upload.html

     点击选择文件,并提交,

    上传文件成功后,页面返回文件的访问链接如下:

    可以使用浏览器访问返回的链接,能显示上传的图片。

    查看七牛云的空间管理,进入对于的空间名称,点击文件管理,找到上传的文件。

    参考:129_七牛云流形式上传demo_哔哩哔哩_bilibili

    完成!enjoy it!

  • 相关阅读:
    vue 表单当用户修改字段,点击关闭弹窗时,检测用户是否有修改
    平台工程: 用Backstage构建开发者门户 - 2
    直播预告 | 这是一场你绝对不能错过的电商风控实操课程
    Log4j日志级别及使用规范
    Editor.md-编辑器
    2022山东健康展,健康产业展,DJK中国健博会,睡眠健康展
    JSP介绍及常用方法
    windows环境CLion调试SRS流媒体服务器源码
    木聚糖-氨基|Xylan-NH2|木聚糖-聚乙二醇-氨基|氨基-PEG-木聚糖
    Spring事务失效常见场景
  • 原文地址:https://blog.csdn.net/qq_42881421/article/details/126675370