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

如何保證指定時(shí)間段內(nèi)可以訪問(wèn)私有權(quán)限的圖片文件?

更新時(shí)間:

通過(guò)云服務(wù)器ECS編寫(xiě)網(wǎng)頁(yè)時(shí),可能會(huì)有引用某個(gè)存儲(chǔ)空間(Bucket)的私有權(quán)限的圖片文件的需求。如果需要在指定時(shí)間段內(nèi)訪問(wèn)私有權(quán)限的圖片文件,可以通過(guò)SDK或命令行工具ossutil生成較大過(guò)期時(shí)間的簽名URL。為避免圖片文件被其他人盜用,您還需要對(duì)該圖片文件所在的Bucket設(shè)置防盜鏈。

步驟一:生成簽名URL

出于安全考慮,OSS控制臺(tái)中默認(rèn)URL的有效時(shí)間為3600秒,最大值為32400秒。如果您希望獲取更長(zhǎng)時(shí)效的文件URL,請(qǐng)使用命令行工具ossutil或者OSS SDK。

以下示例用于為存儲(chǔ)空間examplebucket下的文件exampleobject.png生成文件URL,并指定該簽名URL30天內(nèi)可有效訪問(wèn)。

使用命令行工具ossutil

ossutil sign oss://examplebucket/exampleobject.png --timeout 2592000

使用阿里云SDK

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

public class Demo {
    public static void main(String[] args) throws Throwable {
        // Endpoint以華東1(杭州)為例,其他Region請(qǐng)按實(shí)際情況填寫(xiě)。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 強(qiáng)烈建議不要把訪問(wèn)憑證保存到工程代碼里,否則可能導(dǎo)致訪問(wèn)憑證泄露,威脅您賬號(hào)下所有資源的安全。本代碼示例以從環(huán)境變量中獲取訪問(wèn)憑證為例。運(yùn)行本代碼示例之前,請(qǐng)先配置環(huán)境變量。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // 填寫(xiě)B(tài)ucket名稱(chēng),例如examplebucket。
        String bucketName = "examplebucket";
        // 填寫(xiě)Object完整路徑,例如exampleobject.png。Object完整路徑中不能包含Bucket名稱(chēng)。
        String objectName = "exampleobject.png";
       
        // 創(chuàng)建OSSClient實(shí)例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);

        try {
            // 設(shè)置簽名URL過(guò)期時(shí)間,單位為秒,本示例以設(shè)置過(guò)期時(shí)間為30天為例。您可以根據(jù)實(shí)際業(yè)務(wù)場(chǎng)景,設(shè)置合理的過(guò)期時(shí)間。
            Date expiration = new Date(new Date().getTime() + 30 * 24 * 3600 * 1000);
            // 生成以GET方法訪問(wèn)的簽名URL,在簽名URL有效期內(nèi)訪客可以直接通過(guò)瀏覽器訪問(wèn)相關(guān)內(nèi)容。
            URL url = ossClient.generatePresignedUrl(bucketName, objectName, expiration);
            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();
            }
        }
    }
}                   
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}

use OSS\OssClient;
use OSS\Core\OssException;
use OSS\Http\RequestCore;
use OSS\Http\ResponseCore;

// 從環(huán)境變量中獲取訪問(wèn)憑證。運(yùn)行本代碼示例之前,請(qǐng)確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
$accessKeyId = getenv("OSS_ACCESS_KEY_ID");
$accessKeySecret = getenv("OSS_ACCESS_KEY_SECRET");
// yourEndpoint填寫(xiě)B(tài)ucket所在地域?qū)?yīng)的Endpoint。以華東1(杭州)為例,Endpoint填寫(xiě)為https://oss-cn-hangzhou.aliyuncs.com。
$endpoint = "yourEndpoint";
// 填寫(xiě)B(tài)ucket名稱(chēng)。
$bucket= "examplebucket";
// 填寫(xiě)不包含Bucket名稱(chēng)在內(nèi)的Object完整路徑。
$object = "exampleobject.txt";
// 指定簽名URL過(guò)期時(shí)間,單位為秒,本示例以設(shè)置簽名ULR過(guò)期時(shí)間為30天為例。您可以根據(jù)實(shí)際業(yè)務(wù)場(chǎng)景,設(shè)置合理的過(guò)期時(shí)間。
$timeout = 2592000;
try {
    $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false);

    // 生成GetObject的簽名URL。
    $signedUrl = $ossClient->signUrl($bucket, $object, $timeout);
} catch (OssException $e) {
    printf(__FUNCTION__ . ": FAILED\n");
    printf($e->getMessage() . "\n");
    return;
}
print(__FUNCTION__ . ": signedUrl: " . $signedUrl . "\n");

// 您可以使用代碼來(lái)訪問(wèn)簽名URL,也可以輸入到瀏覽器地址欄中進(jìn)行訪問(wèn)。
$request = new RequestCore($signedUrl);
// 生成的簽名URL默認(rèn)以GET方式訪問(wèn)。
$request->set_method('GET');
$request->add_header('Content-Type', '');
$request->send_request();
$res = new ResponseCore($request->get_response_header(), $request->get_response_body(), $request->get_response_code());
if ($res->isOK()) {
    print(__FUNCTION__ . ": OK" . "\n");
} else {
    print(__FUNCTION__ . ": FAILED" . "\n");
};                    
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
import requests

# 從環(huán)境變量中獲取訪問(wèn)憑證。運(yùn)行本代碼示例之前,請(qǐng)確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# yourEndpoint填寫(xiě)B(tài)ucket所在地域?qū)?yīng)的Endpoint。以華東1(杭州)為例,Endpoint填寫(xiě)為https://oss-cn-hangzhou.aliyuncs.com。
# 填寫(xiě)B(tài)ucket名稱(chēng),例如examplebucket。
bucket = oss2.Bucket(auth, 'yourEndpoint', 'examplebucket')
# 填寫(xiě)Object完整路徑,例如exampledir/exampleobject.txt。Object完整路徑中不能包含Bucket名稱(chēng)。
object_name = 'exampledir/exampleobject.txt'

# 指定簽名URL過(guò)期時(shí)間,單位為秒,本示例以設(shè)置簽名ULR過(guò)期時(shí)間為30天為例。您可以根據(jù)實(shí)際業(yè)務(wù)場(chǎng)景,設(shè)置合理的過(guò)期時(shí)間。
# 生成簽名URL時(shí),OSS默認(rèn)會(huì)對(duì)Object完整路徑中的正斜線(/)進(jìn)行轉(zhuǎn)義,從而導(dǎo)致生成的簽名URL無(wú)法直接使用。
# 設(shè)置slash_safe為T(mén)rue,OSS不會(huì)對(duì)Object完整路徑中的正斜線(/)進(jìn)行轉(zhuǎn)義,此時(shí)生成的簽名URL可以直接使用。
url = bucket.sign_url('GET', object_name, 2592000, slash_safe=True)     
print('簽名url的地址為:', url)

# 使用簽名URL將Object下載到本地。
# 填寫(xiě)本地文件的完整路徑,例如D:\\localpath\\examplefile.txt。
# 如果未指定本地路徑只設(shè)置了本地文件名稱(chēng)(例如examplefile.txt),則下載后的文件默認(rèn)保存到示例程序所屬項(xiàng)目對(duì)應(yīng)本地路徑中。
result = bucket.get_object_with_url_to_file(url, 'D:\\localpath\\examplefile.txt')
print(result.read())
package main

    import (
        "fmt"
        "os"
        "github.com/aliyun/aliyun-oss-go-sdk/oss"
    )

func main() {
    /// 從環(huán)境變量中獲取訪問(wèn)憑證。運(yùn)行本代碼示例之前,請(qǐng)確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
    provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // 創(chuàng)建OSSClient實(shí)例。
    // yourEndpoint填寫(xiě)B(tài)ucket對(duì)應(yīng)的Endpoint,以華東1(杭州)為例,填寫(xiě)為https://oss-cn-hangzhou.aliyuncs.com。其他Region請(qǐng)按實(shí)際情況填寫(xiě)。
    client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // 填寫(xiě)B(tài)ucket名稱(chēng),例如examplebucket。
    bucketName := "examplebucket"
    // 填寫(xiě)文件完整路徑,例如exampledir/exampleobject.txt。文件完整路徑中不能包含Bucket名稱(chēng)。
    objectName := "exampledir/exampleobject.txt"
    // 下載OSS文件到本地文件,并保存到指定的本地路徑中。如果指定的本地文件存在會(huì)覆蓋,不存在則新建。
    // 如果未指定本地路徑,則下載后的文件默認(rèn)保存到示例程序所屬項(xiàng)目對(duì)應(yīng)本地路徑中。
    localDownloadedFilename := "D:\\localpath\\examplefile.txt"

    // 獲取存儲(chǔ)空間。
    bucket, err := client.Bucket(bucketName)
    if err != nil {
        HandleError(err)
    }

    // 指定簽名URL過(guò)期時(shí)間,單位為秒,本示例以設(shè)置簽名ULR過(guò)期時(shí)間為30天為例。您可以根據(jù)實(shí)際業(yè)務(wù)場(chǎng)景,設(shè)置合理的過(guò)期時(shí)間。
    signedURL, err := bucket.SignURL(objectName, oss.HTTPGet, 2592000)
    if err != nil {
        HandleError(err)
    }

    body, err := bucket.GetObjectWithURL(signedURL)
    if err != nil {
        HandleError(err)
    }
    // 讀取內(nèi)容。
    data, err := ioutil.ReadAll(body)
    body.Close()
    data = data // use data。

    // 使用簽名URL將OSS文件下載到本地文件。
    err = bucket.GetObjectToFileWithURL(signedURL, localDownloadedFilename)
    if err != nil {
        HandleError(err)
    }
}                    
using Aliyun.OSS;
using Aliyun.OSS.Common;
// 填寫(xiě)B(tài)ucket所在地域?qū)?yīng)的Endpoint。以華東1(杭州)為例,Endpoint填寫(xiě)為https://oss-cn-hangzhou.aliyuncs.com。
var endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 從環(huán)境變量中獲取訪問(wèn)憑證。運(yùn)行本代碼示例之前,請(qǐng)確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// 填寫(xiě)B(tài)ucket名稱(chēng),例如examplebucket。
var bucketName = "examplebucket";
// 填寫(xiě)Object完整路徑,完整路徑中不包含Bucket名稱(chēng),例如exampledir/exampleobject.txt。
var objectName = "exampledir/exampleobject.txt";
// 填寫(xiě)Object下載到本地文件的完整路徑。例如D:\\localpath\\examplefile.txt。如果指定的本地文件存在會(huì)覆蓋,不存在則新建。
var downloadFilename = "D:\\localpath\\examplefile.txt";
// 創(chuàng)建OSSClient實(shí)例。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
try
{
    var metadata = client.GetObjectMetadata(bucketName, objectName);
    var etag = metadata.ETag;
    // 生成簽名URL。
    var req = new GeneratePresignedUriRequest(bucketName, objectName, SignHttpMethod.Get)
      {
        // 指定簽名URL過(guò)期時(shí)間,單位為小時(shí),本示例以設(shè)置簽名ULR過(guò)期時(shí)間為30天為例。您可以根據(jù)實(shí)際業(yè)務(wù)場(chǎng)景,設(shè)置合理的過(guò)期時(shí)間。
        Expiration = DateTime.Now.AddHours(720),
    };
    var uri = client.GeneratePresignedUri(req);
    // 使用簽名URL下載文件。
    OssObject ossObject = client.GetObject(uri);
    using (var file = File.Open(downloadFilename, FileMode.OpenOrCreate))
    {
        using (Stream stream = ossObject.Content)
        {
            int length;
            int bufLength = 4 * 1024;
            var buf = new byte[bufLength];
            do
            {
                length = requestStream.Read(buf, 0, bufLength);
                fs.Write(buf, 0, length);
            } while (length != 0);
        }
    }
    Console.WriteLine("Get object by signatrue succeeded. {0} ", uri.ToString());
}
catch (OssException ex)
{
    Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
        ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
    Console.WriteLine("Failed with error info: {0}", ex.Message);
}
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* 初始化OSS賬號(hào)信息。*/
            
    /* yourEndpoint填寫(xiě)B(tài)ucket所在地域?qū)?yīng)的Endpoint。以華東1(杭州)為例,Endpoint填寫(xiě)為https://oss-cn-hangzhou.aliyuncs.com。*/
    std::string Endpoint = "yourEndpoint";
    /* 填寫(xiě)B(tài)ucket名稱(chēng),例如examplebucket。*/
    std::string BucketName = "examplebucket";
    /* 填寫(xiě)Object完整路徑,完整路徑中不能包含Bucket名稱(chēng),例如exampledir/exampleobject.txt。*/ 
    std::string GetobjectUrlName = "exampledir/exampleobject.txt";

    /* 初始化網(wǎng)絡(luò)等資源。*/
    InitializeSdk();

    ClientConfiguration conf;
    /* 從環(huán)境變量中獲取訪問(wèn)憑證。運(yùn)行本代碼示例之前,請(qǐng)確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。*/
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);

    /* 指定簽名URL過(guò)期時(shí)間,單位為秒,本示例以設(shè)置簽名ULR過(guò)期時(shí)間為30天為例。您可以根據(jù)實(shí)際業(yè)務(wù)場(chǎng)景,設(shè)置合理的過(guò)期時(shí)間。*/
    std::time_t t = std::time(nullptr) + 2592000;
    /* 生成簽名URL。*/
    auto genOutcome = client.GeneratePresignedUrl(BucketName, GetobjectUrlName, t, Http::Get);
    if (genOutcome.isSuccess()) {
        std::cout << "GeneratePresignedUrl success, Gen url:" << genOutcome.result().c_str() << std::endl;
    }
    else {
        /* 異常處理。*/
        std::cout << "GeneratePresignedUrl fail" <<
        ",code:" << genOutcome.error().Code() <<
        ",message:" << genOutcome.error().Message() <<
        ",requestId:" << genOutcome.error().RequestId() << std::endl;
        ShutdownSdk();
        return -1;
    }

    /* 使用簽名URL下載文件。*/
    auto outcome = client.GetObjectByUrl(genOutcome.result());

    if (!outcome.isSuccess()) {
        /* 異常處理。*/
        std::cout << "GetObjectByUrl fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        ShutdownSdk();
        return -1;
    }

    /* 釋放網(wǎng)絡(luò)等資源。*/
    ShutdownSdk();
    return 0;
}

步驟二:設(shè)置防盜鏈

OSS支持對(duì)Bucket設(shè)置防盜鏈,即通過(guò)對(duì)訪問(wèn)來(lái)源設(shè)置白名單的機(jī)制,避免OSS資源被其他人盜用。

假設(shè)為存儲(chǔ)空間examplebucket設(shè)置防盜鏈,限制僅允許Refererhttps://192.168.0.0IP地址訪問(wèn),具體操作步驟如下:

  1. 登錄OSS管理控制臺(tái)

  2. 單擊Bucket列表,然后單擊examplebucket。

  3. 在左側(cè)導(dǎo)航欄,選擇數(shù)據(jù)安全 > 防盜鏈

  4. 防盜鏈頁(yè)面,打開(kāi)防盜鏈開(kāi)關(guān)。

    • 白名單Referer輸入框中,填寫(xiě)https://192.168.0.0

    • Referer區(qū)域,選擇不允許空Referer。

      選擇不允許空Referer,即只有HTTPHTTPS Header中包含Referer字段的請(qǐng)求才能訪問(wèn)OSS資源。

    • 截?cái)?span id="z68uejxpaoma" class="help-letter-space">QueryString區(qū)域,選擇是否允許截?cái)?span id="z68uejxpaoma" class="help-letter-space">QueryString。

      • 允許:OSS匹配該Referer時(shí)默認(rèn)截?cái)?span id="z68uejxpaoma" class="help-letter-space">QueryString。例如Referer設(shè)置為http://www.example.com/?action=nop,OSS匹配該Referer時(shí)默認(rèn)截?cái)?span id="z68uejxpaoma" class="help-letter-space">QueryString,即使用http://www.example.com/進(jìn)行匹配。

      • 不允許:OSS匹配該Referer時(shí)不截?cái)?span id="z68uejxpaoma" class="help-letter-space">QueryString。例如Referer設(shè)置為http://www.example.com/?action=nop,OSS會(huì)使用http://www.example.com/?action=nop進(jìn)行匹配。關(guān)于QueryString的解析規(guī)則,請(qǐng)參見(jiàn)QueryString解析規(guī)則

  5. 單擊保存

關(guān)于防盜鏈的更多信息,請(qǐng)參見(jiàn)防盜鏈