Java集成七牛云

spring-boot-starter-test

test

com.qiniu

qiniu-java-sdk

7.4.0

com.qiniu

happy-dns-java

0.1.6

com.squareup.okhttp3

okhttp

3.14.8

compile

com.google.code.gson

gson

2.8.6

compile

第二步:在resources目录创建七牛属性配置文件qiniu.properties:


qiniu.access-key=AW8tBsAy-uXXdYCO6E0ZDWMYJhY5HOEBboD_MtcH

qiniu.secret-key=kezs7Q_FlHIvwxx6nnslmhoVlh8kqStSarpISjmF

qiniu.bucket=hcstore

[{‘region0’:‘华东’}, {‘region1’:‘华北’},{‘region2’:‘华南’},{‘regionNa0’:‘北美’},{‘regionAs0’:‘’}]

qiniu.region=region2

qiniu.domain-of-bucket=http://qm6ralq5f.hn-bkt.clouddn.com/

链接过期时间,单位是秒,3600代表1小时,-1代表永不过期

qiniu.expire-in-seconds=-1

第三步:创建七牛配置文件QiNiuConfig.java:


@Data

public class QiNiuConfig {

private String accessKey;

private String secretKey;

private String bucket;

private Region region;

private String domainOfBucket;

private long expireInSeconds;

private QiNiuConfig(){ //单例设计模式

Properties prop = new Properties();

try {

prop.load(QiNiuConfig.class.getResourceAsStream(“/qiniu.properties”));

accessKey = prop.getProperty(“qiniu.access-key”);

secretKey = prop.getProperty(“qiniu.secret-key”);

bucket = prop.getProperty(“qiniu.bucket”);

domainOfBucket = prop.getProperty(“qiniu.domain-of-bucket”);

expireInSeconds = Long.parseLong(prop.getProperty(“qiniu.expire-in-seconds”));

String zoneName = prop.getProperty(“qiniu.region”);

if(zoneName.equals(“region0”)){

region = Region.region0();

}else if(zoneName.equals(“region1”)){

region = Region.region1();

}else if(zoneName.equals(“region2”)){

region = Region.region2();

}else if(zoneName.equals(“regionAs0”)){

region = Region.regionAs0();

}else if(zoneName.equals(“regionNa0”)){

region = Region.regionNa0();

}else{

throw new Exception(“Region对象配置错误!”);

}

} catch (Exception e) {

e.printStackTrace();

}

}

private static QiNiuConfig instance = new QiNiuConfig();

public static QiNiuConfig getInstance() {

return instance;

}

}

第三步:编写七牛工具类:


public class QiNiuUtil {

private static final String secretKey = QiNiuConfig.getInstance().getSecretKey();

private static final String bucket = QiNiuConfig.getInstance().getBucket();

private static final Region region = QiNiuConfig.getInstance().getRegion();

private static String accessKey = QiNiuConfig.getInstance().getAccessKey();

/**

  • 上传本地文件

  • @param localFilePath 本地文件完整路径

  • @param key 文件云端存储的名称,值为null时生成随机的文件名,同名文件会发生覆盖

  • @return

*/

public static String upload(String localFilePath, String key) {

UploadManager uploadManager = getUploadManager();

//…生成上传凭证,然后准备上传

Auth auth = Auth.create(accessKey, secretKey);

String upToken;

if (key != null) {

upToken = auth.uploadToken(bucket, key);//覆盖上传凭证

} else {

upToken = auth.uploadToken(bucket);

}

try {

Response response = uploadManager.put(localFilePath, key, upToken);

//解析上传成功的结果

DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);

return putRet.key;

} catch (QiniuException ex) {

ex.printStackTrace();

return null;

}

}

/**

  • 上传MultipartFile

  • @param file

  • @param key 文件云端存储的名称,值为null时生成随机的文件名,同名文件会发生覆盖

  • @return

  • @throws IOException

*/

public static String uploadMultipartFile(MultipartFile file,String key) {

UploadManager uploadManager = getUploadManager();

//把文件转化为字节数组

InputStream is = null;

ByteArrayOutputStream bos = null;

try {

is = file.getInputStream();

bos = new ByteArrayOutputStream();

byte[] b = new byte[1024];

int len = -1;

while ((len = is.read(b)) != -1) {

bos.write(b, 0, len);

}

byte[] uploadBytes = bos.toByteArray();

Auth auth = getAuth();

String upToken;

if (key != null) {

upToken = auth.uploadToken(bucket, key);//覆盖上传凭证

} else {

upToken = auth.uploadToken(bucket);

}

//默认上传接口回复对象

DefaultPutRet putRet;

//进行上传操作,传入文件的字节数组,文件名,上传空间,得到回复对象

Response response = uploadManager.put(uploadBytes, key, upToken);

putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);

return putRet.key;

} catch (QiniuException e) {

e.printStackTrace();

return null;

} catch (IOException e) {

e.printStackTrace();

return null;

}

}

/**

  • 获取所有的bucket

*/

public static String[] getBucketsInfo() {

try {

BucketManager bucketManager = getBucketManager();

//获取所有的bucket信息

String[] buckets = bucketManager.buckets();

return buckets;

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

/**

  • 获取文件访问地址

  • @param fileName 文件云端存储的名称

  • @return

  • @throws UnsupportedEncodingException

*/

public static String fileUrl(String fileName) throws UnsupportedEncodingException {

String encodedFileName = URLEncoder.encode(fileName, “utf-8”);

String publicUrl = String.format(“%s/%s”, bucket, encodedFileName);

Auth auth = getAuth();

long expireInSeconds = QiNiuConfig.getInstance().getExpireInSeconds();

if (-1 == expireInSeconds) {

return auth.privateDownloadUrl(publicUrl);

}

return auth.privateDownloadUrl(publicUrl, expireInSeconds);

}

/**

  • 获取bucket里面所有文件的信息

*/

public static FileInfo[] getFileInfo() {

try {

BucketManager bucketManager = getBucketManager();

//文件名前缀

String prefix = “”;

//每次迭代的长度限制,最大1000,推荐值 1000

int limit = 1000;

//指定目录分隔符,列出所有公共前缀(模拟列出目录效果)。缺省值为空字符串

String delimiter = “”;

//列举空间文件列表

BucketManager.FileListIterator fileListIterator = bucketManager.createFileListIterator(bucket, prefix, limit, delimiter);

while (fileListIterator.hasNext()) {

//处理获取的file list结果

FileInfo[] items = fileListIterator.next();

return items;

}

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

/**

  • 删除多个文件

  • @param keys 文件名称数组

  • @return

*/

public static Map<String, String> deletes(String… keys) {

Map<String, String> map = new HashMap<>();

try {

//设定删除的数据

BucketManager.BatchOperations batchOperations = new BucketManager.BatchOperations();

batchOperations.addDeleteOp(bucket, keys);

BucketManager bucketManager = getBucketManager();

//发送请求

Response response = bucketManager.batch(batchOperations);

//返回数据

BatchStatus[] batchStatusList = response.jsonToObject(BatchStatus[].class);

for (int i = 0; i < keys.length; i++) {

BatchStatus status = batchStatusList[i];

String key = keys[i];

if (status.code == 200) {

map.put(key, “delete success”);

} else {

map.put(key, “delete failed”);

}

}

} catch (Exception e) {

}

return map;

}

/**

  • 删除bucket中的文件名称

  • @param key 文件名称

  • @return

总结

无论是哪家公司,都很重视高并发高可用的技术,重视基础,重视JVM。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。

最后我整理了一些面试真题资料,技术知识点剖析教程,还有和广大同仁一起交流学习共同进步,还有一些职业经验的分享。

面试了阿里,滴滴,网易,蚂蚁,最终有幸去了网易【面试题分享】

String key = keys[i];

if (status.code == 200) {

map.put(key, “delete success”);

} else {

map.put(key, “delete failed”);

}

}

} catch (Exception e) {

}

return map;

}

/**

  • 删除bucket中的文件名称

  • @param key 文件名称

  • @return

总结

无论是哪家公司,都很重视高并发高可用的技术,重视基础,重视JVM。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。

最后我整理了一些面试真题资料,技术知识点剖析教程,还有和广大同仁一起交流学习共同进步,还有一些职业经验的分享。

[外链图片转存中…(img-Dnx4vbWC-1714138532007)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 19
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 中使用七牛云进行目录创建,可以使用七牛云官方提供的 Java SDK。具体步骤如下: 1. 引入七牛云 Java SDK 的依赖包。 ```xml <dependency> <groupId>com.qiniu</groupId> <artifactId>qiniu-java-sdk</artifactId> <version>7.2.0</version> </dependency> ``` 2. 初始化七牛云配置信息,包括 Access Key、Secret Key 和存储空间名称。 ```java String accessKey = "your-access-key"; String secretKey = "your-secret-key"; String bucket = "your-bucket-name"; Configuration cfg = new Configuration(); ``` 3. 创建七牛云认证对象。 ```java Auth auth = Auth.create(accessKey, secretKey); ``` 4. 创建七牛云存储空间管理对象。 ```java BucketManager bucketManager = new BucketManager(auth, cfg); ``` 5. 调用 BucketManager 的 createBucket 方法创建目录。其中,目录名需要以“/”结尾。 ```java String directoryName = "your-directory-name/"; String key = directoryName + "empty"; Response response = bucketManager.put(bucket, key, new ByteArrayInputStream(new byte[0]), 0, null, null, null); ``` 6. 根据返回的 Response 对象判断目录创建是否成功。 ```java if (response.isOK()) { System.out.println("目录创建成功!"); } else { System.out.println("目录创建失败,错误信息:" + response.error); } ``` 需要注意的是,七牛云上的目录实际上是一个虚拟的概念,它只是在文件名中使用“/”符号来表示层级关系。因此,在创建目录时,实际上是在该存储空间下创建一个以该目录名称为前缀的空文件。如果要上传文件到该目录下,只需将文件名设为“目录名/文件名”的形式即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值