1. 程式人生 > >java-百度bos下載檔案

java-百度bos下載檔案

最近有個需求就是使用百度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();
	}

目前使用官方的獲取資料夾下的檔案列表一直獲取不到,所以只能用 迴圈獲取的方法實現了。希望大神能提供好的方法。