七牛云存储OSS基本使用测试(超详细!!!)
【代码】七牛云OSS基本使用测试(超详细!!!
·
首先就是注册,然后实名认证,这没什么可教的
认账成功后,点击对象存储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();
}
}
启动测试就成功了!!!
更多推荐
已为社区贡献1条内容
所有评论(0)