概述
針對七牛目前的私有空間、原圖保護,如果希望 下載該類型或者開啓原圖保護下的空間下的文件資源,則需要進行簽名後才能進行訪問下載。思路
- 創建自定義域名並綁定到一個空間上,即可通過該域名訪問該空間下的文件資源;即:獲取該文件資源的url,測試也可以用七牛提供的測試域名,但不建議使用到實際項目中。
- 獲取該url後,需要使用七牛提供的auth對象,獲取下載的url——-downloadUrl
- 通過http請求,根據downloadUrl 發送get請求進行下載。
代碼示例
package com.qiniu.kodo;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import com.qiniu.base.AccountMgr;
import com.qiniu.util.Auth;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.ResponseBody;
/**
* 七牛私有空間文件下載
* @author xuhuanchao
*
*/
public class Download {
//密鑰配置
Auth auth = Auth.create(AccountMgr.ACCESS_KEY, AccountMgr.SECRET_KEY);
/**
* 獲取下載文件路徑,即:donwloadUrl
* @return
*/
public String getDownloadUrl(String targetUrl) {
String downloadUrl = auth.privateDownloadUrl(targetUrl);
return downloadUrl;
}
/**
* 下載
*/
public void download(String targetUrl) {
//獲取downloadUrl
String downloadUrl = getDownloadUrl(targetUrl);
//本地保存路徑
String filePath = "/Users/xuhuanchao/Documents/admin/download/";
download(downloadUrl, filePath);
}
/**
* 通過發送http get 請求獲取文件資源
* @param url
* @param filepath
* @return
*/
private static void download(String url, String filepath) {
OkHttpClient client = new OkHttpClient();
System.out.println(url);
Request req = new Request.Builder().url(url).build();
Response resp = null;
try {
resp = client.newCall(req).execute();
System.out.println(resp.isSuccessful());
if(resp.isSuccessful()) {
ResponseBody body = resp.body();
InputStream is = body.byteStream();
byte[] data = readInputStream(is);
File imgFile = new File(filepath + "admin_2.png");
FileOutputStream fops = new FileOutputStream(imgFile);
fops.write(data);
fops.close();
}
} catch (IOException e) {
e.printStackTrace();
System.out.println("Unexpected code " + resp);
}
}
/**
* 讀取字節輸入流內容
* @param is
* @return
*/
private static byte[] readInputStream(InputStream is) {
ByteArrayOutputStream writer = new ByteArrayOutputStream();
byte[] buff = new byte[1024 * 2];
int len = 0;
try {
while((len = is.read(buff)) != -1) {
writer.write(buff, 0, len);
}
is.close();
} catch (IOException e) {
e.printStackTrace();
}
return writer.toByteArray();
}
/**
* 主函數:測試
* @param args
*/
public static void main(String[] args) {
//構造私有空間的需要生成的下載的鏈接;
//格式: http://私有空間綁定的域名/空間下的文件名
String targetUrl = "http://oddbqeh34.bkt.clouddn.com/admin_2.png";
new Download().download(targetUrl);
}
}
注:當前使用的是qiniu-java-sdk-7.2.1.jar