首先就是注册,然后实名认证,这没什么可教的

认账成功后,点击对象存储Kodo

点击左侧空间管理,新建空间

输入一个名字,存储区域选择距离你地址比较近的,访问控制选择公开(这样别人在访问时也可以看到)

这样就创建成功了

然后点击右上角控制台,文档   开发者中心

选择对象存储

这里我用的java,找到对应的sdk

这里使用maven的方法,复制这里的代码

复制到自己的pom文件中,导入依赖,记得刷新一下

成功导入

那么问题来了,依赖添加完成,然后呢?然后干啥,咋写呢?别急接着看文档

这里使用服务器直传

 

数据流上传

这里新建一个测试类,主要看怎么使用这些代码,把刚才复制的代码复制到这个testOss方法中,刚开始绝对爆红,挨个导包就好了

导包完成后,需要修改一下代码,接下来我们一步一步修改

然后获取密钥

然后按照这样的方式,先简单测试一下,这里我上传的本地文件

修改一下配置,添加注解

application.yml配置

这样输出了一下东西,看起来也没有失败

然后进入七牛云查看,这里已经上传成功了,这里key没有命名,就是hash值

那么我们可以再试一下key的用法,我把key固定写成zzq.png

这里成功了,我们到七牛云上去查看,也是有的

那么问题来了,我们怎么样创建一个目录把图片放进去呢,其实也是通过key,key="2024/zzq.png",测试成功

我们再去七牛云查看,这里就成功了!!

那么问题又来了,我们怎么单元测试可以,那么我怎么用到最近的项目当中呢,这里我用我的博客项目做个演示

这里的接口设计是这样的,其实操作都大差不差

首先创建一个UploadController

@RestController
public class UploadController {

    @Autowired
    private UploadService uploadService;


    @PostMapping("/upload")
    public ResponseResult uploadImg(MultipartFile img){

        return uploadService.uploadImg(img);

    }
}

创建UploadService

public interface UploadService {
    ResponseResult uploadImg(MultipartFile img);
}

创建OssUploadService实现UploadService接口


@Service
@Data
@ConfigurationProperties(prefix = "oss")
public class OssUploadService implements UploadService {
    @Override
    public ResponseResult uploadImg(MultipartFile img) {
        //判断文件类型或者文件大小
        //获取原始文件名
        String originalFilename = img.getOriginalFilename();
        //对原始文件名进行判断
        if(!originalFilename.endsWith(".png") && !originalFilename.endsWith(".jpg") && !originalFilename.endsWith(".jpeg")){
            throw new SystemException(AppHttpCodeEnum.FILE_TYPE_ERROR);
        }

        //如果判断通过上传文件到OSS
        String filePath = PathUtils.generateFilePath(originalFilename);
        String url = uploadOss(img,filePath); // 2024/8/19/uuid.png
        return ResponseResult.okResult(url);
    }

    private String accessKey;
    private String secretKey;
    private String bucket;

    private String uploadOss(MultipartFile imgFile, String filePath) {
        //构造一个带指定 Region 对象的配置类
        Configuration cfg = new Configuration(Region.autoRegion());
        cfg.resumableUploadAPIVersion = Configuration.ResumableUploadAPIVersion.V2;// 指定分片上传版本
        //...其他参数参考类注释

        UploadManager uploadManager = new UploadManager(cfg);

        //默认不指定key的情况下,以文件内容的hash值作为文件名
        String key = filePath;

        try {
            InputStream inputStream = imgFile.getInputStream();
            Auth auth = Auth.create(accessKey, secretKey);
            String upToken = auth.uploadToken(bucket);

            try {
                Response response = uploadManager.put(inputStream, key, upToken, null, null);
                //解析上传成功的结果
                DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
                System.out.println(putRet.key);
                System.out.println(putRet.hash);
                return "http://sif8sqtr1.hb-bkt.clouddn.com/"+key;
            } catch (QiniuException ex) {
                ex.printStackTrace();
                if (ex.response != null) {
                    System.err.println(ex.response);

                    try {
                        String body = ex.response.toString();
                        System.err.println(body);
                    } catch (Exception ignored) {
                    }
                }
            }
        } catch (Exception ex) {
            //ignore
        }
        return "www";
    }
}

命名方式用到这个工具类 

public class PathUtils {

    public static String generateFilePath(String fileName) {

        //根据日期生成路径 2022/1/15/
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd/");
        String datePath = sdf.format(new Date());

        //uuid作为文件名
        String uuid = UUID.randomUUID().toString().replaceAll("-", "");

        //后缀和文件后缀一致
        int index = fileName.lastIndexOf(".");

        // test.jpg -> .jpg
        String fileType = fileName.substring(index);

        return new StringBuilder().append(datePath).append(uuid).append(fileType).toString();
    }

}

启动测试就成功了!!!

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐