繁体   English   中英

使用Java在azure blob中私下上传文件后如何获取SAS URL

[英]How to get SAS URL after file upload in azure blob privately using Java

我正在为公共 azure blob 生成一个 url

    String connectStr = "connection string";
    BlobServiceClient blobServiceClient = new BlobServiceClientBuilder().connectionString(connectStr).buildClient();

    BlobContainerClient containerClient = blobServiceClient.getBlobContainerClient("container name");

    BlobClient blobClient=containerClient.getBlobClient("blob name");

    String newstring = blobClient.getBlobUrl();
    System.out.println(newstring);

但问题是这仅为公共 blob 生成一个 url 我怎样才能获得私有 blob 的 url。

检查这个Java Storage V12 change ,有关于 sas 的描述。

由于没有 generateSAS 方法,因此无法发现如何执行像创建 SAS 令牌这样的基本操作,而弄清楚如何将 SAS 附加到 URL 是另一个问题。

所以现在如果你想使用v12 sdk,还得说没办法实现。 如果你接受其他版本的 sdk,你可以参考下面的代码,它使用的是 V8 sdk。

import com.microsoft.azure.storage.CloudStorageAccount;
import com.microsoft.azure.storage.StorageException;
import com.microsoft.azure.storage.blob.*;
import java.net.URISyntaxException;
import java.security.InvalidKeyException;
import java.util.*;

public class App 
{
    public static void main( String[] args ) throws URISyntaxException, InvalidKeyException, StorageException {

        String storageConnectionString ="connection string";

        CloudStorageAccount storageAccount = CloudStorageAccount.parse(storageConnectionString);
        CloudBlobClient blobClient = storageAccount.createCloudBlobClient();
        CloudBlobContainer container = blobClient.getContainerReference("test");

        CloudBlockBlob blob = container.getBlockBlobReference("test.txt");

        SharedAccessBlobPolicy sasPolicy = new SharedAccessBlobPolicy();

        // Create a UTC Gregorian calendar value.
        GregorianCalendar calendar = new GregorianCalendar(TimeZone.getTimeZone("UTC"));
        // Use the start time delta one hour as the end time for the shared
        // access signature.
        calendar.add(Calendar.HOUR, 10);
        sasPolicy.setSharedAccessExpiryTime(calendar.getTime());

        sasPolicy.setPermissions(EnumSet.of(SharedAccessBlobPermissions.READ, SharedAccessBlobPermissions.WRITE,
                SharedAccessBlobPermissions.LIST));
        String sas = blob.generateSharedAccessSignature(sasPolicy,null);

        String sasurl=blob.getUri()+"?"+sas;

        System.out.println(sasurl);


    }
}

在此处输入图片说明

我的依赖:

<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.microsoft.azure</groupId>
      <artifactId>azure-storage</artifactId>
      <version>8.4.0</version>
    </dependency>

  </dependencies>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM