[英]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.