日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

如何配置通過自定義域名訪問OSS文件時實現強制下載?

通過瀏覽器使用自定義域名訪問OSS上存儲的文件時,如果您的瀏覽器支持預覽所選的文件格式,則OSS將直接預覽文件內容。如果您希望通過瀏覽器使用自定義域名訪問OSS文件時,以附件形式下載文件,您可以通過預簽名URL將response-content-disposition字段設置為attachment來指定單次訪問為強制下載,還可以通過將文件元數據Content-Disposition設置為attachment來指定所有訪問為強制下載。

通過預簽名URL設置單次訪問為強制下載

使用OSS控制臺

  1. 登錄OSS管理控制臺

  2. 在左側導航欄,選擇自助工具 > 簽名工具

  3. 簽名工具頁面,單擊URL簽名頁簽。

  4. URL簽名面板,按以下說明填寫各項參數,其他參數保留默認配置。

    參數

    示例值

    說明

    AccessKeyId

    LTAI*********************

    填寫當前賬號的訪問密鑰AccessKey,包括AccessKey ID和AccessKey Secret。使用阿里云賬號或RAM用戶訪問時,AccessKey的獲取方式,請參見創建AccessKey

    AccessKeySecret

    KZo1******************

    鏈接

    https://example.com/test.txt

    填寫自定義域名和Object的完整路徑。

    Bucket 名稱

    examplebucket

    輸入Object所在的Bucket名稱。

    Query Params

    attachment

    下拉選擇response-content-disposition,取值為attachment,效果是以原文件名的形式下載到瀏覽器指定路徑。

  5. 單擊生成鏈接,然后復制右側的簽名鏈接。

  6. 通過瀏覽器打開簽名鏈接,即可實現下載。

使用阿里云SDK

以Java SDK為例:

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.model.GeneratePresignedUrlRequest;
import java.net.URL;
import java.util.*;
import java.util.Date;

public class Demo {
    public static void main(String[] args) throws Throwable {
        // yourEndpoint填寫自定義域名。
        String endpoint = "https://example.com";
        // 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // 創建ClientBuilderConfiguration實例,您可以根據實際情況修改默認參數。
        ClientBuilderConfiguration conf = new ClientBuilderConfiguration();

        // 將CNAME取值設置為true,用于將自定義域名綁定到目標Bucket。
        conf.setSupportCname(true);
        // 填寫Bucket名稱,例如examplebucket。
        String bucketName = "examplebucket";
        // 填寫Object完整路徑,例如exampleobject.txt。Object完整路徑中不能包含Bucket名稱。
        String objectName = "exampleobject.txt";        

        // 創建OSSClient實例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider, conf);

        try {
            // 創建請求。
            GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(bucketName, objectName);
            // 設置HttpMethod為GET。
            generatePresignedUrlRequest.setMethod(HttpMethod.GET);
            // 設置簽名URL過期時間,單位為毫秒。本示例以設置過期時間為1小時為例。
            Date expiration = new Date(new Date().getTime() + 3600 * 1000L);
            generatePresignedUrlRequest.setExpiration(expiration);
            // 下載后顯示為原Object名稱。
            Map<String, String> queryParam = new HashMap<String, String>();
            queryParam.put("response-content-disposition",  "attachment");
            generatePresignedUrlRequest.setQueryParameter(queryParam);
            // 生成簽名URL。
            URL url = ossClient.generatePresignedUrl(generatePresignedUrlRequest);
            System.out.println(url);
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

通過文件元數據設置所有訪問為強制下載

使用OSS控制臺

  1. 登錄OSS管理控制臺

  2. 單擊Bucket 列表,然后單擊目標Bucket名稱。

  3. 在左側導航欄,選擇文件管理 > 文件列表

  4. 在目標Object右側選擇更多 > 設置文件元數據

  5. 設置文件元數據面板,將Content-Disposition設置為attachment,其他參數保留默認配置,然后單擊確定

  6. 在瀏覽器中通過自定義域名以文件URL的形式訪問目標文件。

    • 以自定義域名為example.com,Bucket根目錄下的文件名稱為example.jpg為例(文件讀寫權限為公共讀或者公共讀寫),您可以在瀏覽器中通過自定義域名拼接文件URL的形式(http://example.com/example.jpg)訪問目標文件。

    • 以自定義域名為example.com,Bucket根目錄下的文件名稱為example.jpg為例(文件讀寫權限為私有),私有文件URL需要添加簽名信息(格式為http://example.com/example.jpg?簽名參數)。關于在瀏覽器中通過自定義域名訪問私有文件的具體操作,請參見使用自定義域名訪問臨時文件URL

使用阿里云SDK

以Java SDK為例:

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.utils.BinaryUtil;
import com.aliyun.oss.model.GeneratePresignedUrlRequest;
import com.aliyun.oss.model.ObjectMetadata;
import java.io.ByteArrayInputStream;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Date;

public class Test {
    public static void main(String[] args) throws Exception {

        // yourEndpoint填寫自定義域名。
        String endpoint = "https://example.com";
        // 強烈建議不要把訪問憑證保存到工程代碼里,否則可能導致訪問憑證泄露,威脅您賬號下所有資源的安全。本代碼示例以從環境變量中獲取訪問憑證為例。運行本代碼示例之前,請先配置環境變量。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // 創建ClientBuilderConfiguration實例,您可以根據實際情況修改默認參數。
        ClientBuilderConfiguration conf = new ClientBuilderConfiguration();

        // 將CNAME取值設置為true,用于將自定義域名綁定到目標Bucket。
        conf.setSupportCname(true);
        // 填寫Bucket名稱,例如examplebucket。
        String bucketName = "examplebucket";
        // 填寫不包含Bucket名稱在內的Object完整路徑,例如testfolder/exampleobject.txt。
        String objectName = "testfolder/exampleobject.txt";
        // 文件內容。
        String content = "Hello OSS";

        // 創建OSSClient實例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider, conf);

        try {
            // 創建上傳文件的元數據,可以通過文件元數據設置HTTP標準屬性。
            ObjectMetadata meta = new ObjectMetadata();

            String md5 = BinaryUtil.toBase64String(BinaryUtil.calculateMd5(content.getBytes()));
            // 開啟文件內容MD5校驗。開啟后OSS會把您提供的MD5與文件的MD5比較,不一致則拋出異常。
            meta.setContentMD5(md5);
            // 指定上傳的內容類型。內容類型決定瀏覽器將以什么形式、什么編碼讀取文件。如果沒有指定則根據文件的擴展名生成,如果沒有擴展名則為默認值application/octet-stream。
            meta.setContentType("text/plain");
            // 下載后顯示為原Object名稱。如果包含有中文字符,需要進行URL編碼。
            meta.setContentDisposition("attachment"+ URLEncoder.encode("UTF-8")+";"+URLEncoder.encode("UTF-8"));
            // 設置上傳文件的長度。如超過此長度,則上傳文件會被截斷,上傳的文件長度為設置的長度。如小于此長度,則為上傳文件的實際長度。
            // meta.setContentLength(content.length());
            // 設置內容被下載時網頁的緩存行為。
            // meta.setCacheControl("Download Action");
            // 設置緩存過期時間,格式是格林威治時間(GMT)。
            // meta.setExpirationTime(DateUtil.parseIso8601Date("2025-10-12T00:00:00.000Z"));

            // 設置Header。
            // meta.setHeader("yourHeader", "yourHeaderValue");

            // 上傳文件。
            ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(content.getBytes()), meta);

            // 驗證URL訪問是否直接下載。
            Date expiration = new Date(new Date().getTime() + 3600 * 1000);
            GeneratePresignedUrlRequest signRequest = new GeneratePresignedUrlRequest(bucketName, objectName, HttpMethod.GET);
            signRequest.setExpiration(expiration);
            URL signedUrl = ossClient.generatePresignedUrl(signRequest);
            System.out.println(signedUrl);

        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

相關文檔