七牛雲存儲之下載私有空間文件

  • 概述
    針對七牛目前的私有空間、原圖保護,如果希望 下載該類型或者開啓原圖保護下的空間下的文件資源,則需要進行簽名後才能進行訪問下載。

  • 思路

    1. 創建自定義域名並綁定到一個空間上,即可通過該域名訪問該空間下的文件資源;即:獲取該文件資源的url,測試也可以用七牛提供的測試域名,但不建議使用到實際項目中。
    2. 獲取該url後,需要使用七牛提供的auth對象,獲取下載的url——-downloadUrl
    3. 通過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

發佈了46 篇原創文章 · 獲贊 30 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章