最近有个需求就是使用百度bos上传文件和文件的打包下载功能,查了好多资料都没有人分享的,自己写一篇以供以后参考。
//这个地方是获取bos的相关信息比如AK、SK以及BaiduBosBucketName等信息
//获取到相应的信息之后封装获取一个BosClient对象
String ACCESS_KEY_ID = jSONObject.getString("BaiduBosAccessKey"); // 用户的Access
String SECRET_ACCESS_KEY = jSONObject.getString("BaiduBosSecretKey"); // 用户的Secret
String bucketName = jSONObject.getString("BaiduBosBucketName");
BosClientConfiguration config = new BosClientConfiguration();
config.setEndpoint(point); // Bucket所在区域
config.setCredentials(new DefaultBceCredentials(ACCESS_KEY_ID, SECRET_ACCESS_KEY));
BosClient client = new BosClient(config);
在获取到BosClient这个对象之后我的业务是将文件打包成zip包所以之后要获取文件列表进行打包
for (SurveyAndroid s : surveyAndroids) {
String urlName = s.getFilesName();
String fileName = urlName.replace("dap/", "");
//上面获取到文件名称之后进行打包
FileUtils.getObject(client, bucketName, fileName, zipOut);
}
下面是获取文件打包的具体代码
/**
* 百度云下载到zip中
* @param client
* @param bucketName
* @param objectKey
* @param zipOut
* @throws IOException
*/
public static void getObject(BosClient client, String bucketName, String objectKey, ZipOutputStream zipOut)
throws IOException {
// 获取Object,返回结果为BosObject对象
BosObject object = client.getObject(bucketName, objectKey);
// 获取Object的输入流
InputStream objectContent = object.getObjectContent();
zipOut.putNextEntry(new ZipEntry(objectKey));
byte[] buffer = new byte[1024];
int r = 0;
while ((r = objectContent.read(buffer)) != -1) {
zipOut.write(buffer, 0, r);
}
objectContent.close();
}
目前使用官方的获取文件夹下的文件列表一直获取不到,所以只能用 循环获取的方法实现了。希望大神能提供好的方法。