我正在使用一个 Azure Blob 存储容器,该容器内部和存放文件的位置有许多假文件夹结构。
我试图使用此代码块来获取层次结构值和 blob,以便我可以将它们返回到调用方法。
private async Task<List<BlobItem>> ListBlobsHierarchicalListing(
BlobContainerClient container,
string prefix)
{
var list = new List<BlobItem>();
var resultSegment =
await container.GetBlobsByHierarchyAsync(prefix: prefix, delimiter: "/").ToListAsync();
// A hierarchical listing may return both virtual directories and blobs.
foreach (BlobHierarchyItem blobhierarchyItem in resultSegment)
{
if (blobhierarchyItem.IsPrefix)
{
// Write out the prefix of the virtual directory.
this.logger.LogDebug("Virtual directory prefix: {0}", blobhierarchyItem.Prefix);
// Call recursively with the prefix to traverse the virtual directory.
list.AddRange(await this.ListBlobsHierarchicalListing(container, blobhierarchyItem.Prefix));
}
else
{
// …Run Code Online (Sandbox Code Playgroud) 我正在使用 ClientCredentails 验证我的用户。我的客户确实有权生成 SaS 令牌。现在我想在短时间内从代码生成 SaS 令牌,以便客户可以直接下载文件。
String tenantId = "TenantId";
String clientSecret = "XXXX"
String clientId = "abc-123"
String authorityUrl = AzureAuthorityHosts.AZURE_PUBLIC_CLOUD + tenantId;
ClientSecretCredential credential = new ClientSecretCredentialBuilder()
.authorityHost(authorityUrl)
.tenantId(tenantId)
.clientSecret(clientSecret)
.clientId(clientId)
.build();
BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
.credential(credential)
.endpoint(azureStorageEndPoint)
.buildClient();
// Upload a file
BlobContainerClient blobContainerClient = blobServiceClient.getBlobContainerClient(containerName);
BlobClient blobClient = blobContainerClient.getBlobClient("Test.txt");
BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(new File("<FILE_PATH>")));
blobClient.upload(bufferedInputStream, bufferedInputStream.available(),true);
BlobSasPermission blobSasPermission = new BlobSasPermission().setReadPermission(true);
OffsetDateTime expiryTime = OffsetDateTime.now().plusDays(1);
BlobServiceSasSignatureValues values = new BlobServiceSasSignatureValues(expiryTime, blobSasPermission)
.setStartTime(OffsetDateTime.now()); …Run Code Online (Sandbox Code Playgroud) 这是我在 StackOverflow 上的第一篇文章,希望它尊重这个社区的准则。
我正在尝试用 Python 完成一个简单的任务,因为尽管我对它很陌生,但我发现它非常容易使用。我在Azure上有一个存储帐户,里面有很多容器。每个容器包含一些随机文件和/或 blob。
我想做的是获取所有这些文件和/或 blob 的名称并将其放在文件中。
现在,我到达这里:
import os, uuid
import sys
from azure.storage.blob import BlobServiceClient, BlobClient, ContainerClient, __version__
connection_string = "my_connection_string"
blob_svc = BlobServiceClient.from_connection_string(conn_str=connection_string)
try:
print("Azure Blob Storage v" + __version__ + " - Python quickstart sample")
print("\nListing blobs...")
containers = blob_svc.list_containers()
list_of_blobs = []
for c in containers:
container_client = blob_svc.get_container_client(c)
blob_list = container_client.list_blobs()
for blob in blob_list:
list_of_blobs.append(blob.name)
file_path = 'C:/my/path/to/file/randomfile.txt'
sys.stdout = open(file_path, "w")
print(list_of_blobs)
except Exception as ex:
print('Exception:')
print(ex)
Run Code Online (Sandbox Code Playgroud)
但我有 …
我在“文件格式设置”步骤中的Azure 数据工厂“复制数据”工具(当前处于预览版)中看到以下错误:
处理请求时出错:列:SystemProperties,位置:源,格式:Avro,Avro 格式目前不支持数据类型“System.Collections.Generic.Dictionary`2[System.String,System.Object]”。活动 ID:0aa778ad-b496-46c1-8de4-97b4f4169be2
源文件采用 Avro 格式,由Azure Event Hubs Archive生成。当我选择 Avro 格式并选择 blob 中的任何 avro 文件时,当该工具尝试确定架构时,我会收到上述错误。我不知道这是复制数据工具的问题还是事件中心存档输出的文件格式的问题。
有没有人遇到过这个问题或关于我如何进一步调查的任何想法?
azure avro azure-eventhub azure-data-factory azure-blob-storage
我正在尝试将 300GB 的文件上传到 Azure Blob 存储。下面是我正在使用的代码:
// content = array of bytes ~ 300 GB
using (var stream = new MemoryStream(content))
{
var blobRequestOptions = new BlobRequestOptions
{
ParallelOperationThreadCount = Microsoft.WindowsAzure.Storage.Shared.Protocol.Constants.MaxParallelOperationThreadCount
};
blob.UploadFromStream(stream, options: blobRequestOptions);
}
Run Code Online (Sandbox Code Playgroud)
此操作失败并显示以下消息错误:
请求正文太大,超出了最大允许限制
使用Azure存储时,我发现如果您使用REST,有一种方法可以在blob操作和表操作上设置超时.
但是我们正在使用通过WindowsAzure.Storage NuGet包(v8.4.0)提供的C#客户端.我在这里看不到任何指定超时的方法
var storageAccount = CloudStorageAccount.Parse("UseDevelopmentStorage=true;DevelopmentStorageProxyUri=http://127.0.0.1"); // local storage for testing
var blobClient = storageAccount.CreateCloudBlobClient();
var container = blobClient.GetContainerReference("mycontainer");
container.CreateIfNotExists();
var blobReference = container.GetBlockBlobReference("my/blob.pdf");
Run Code Online (Sandbox Code Playgroud)
我已经尝试了查看可用属性/方法的CloudBlobClient内容StorageAccount,但没有找到类似超时设置的内容.
如果我可以在一个地方设置timout(在连接字符串中)并且在所有操作中使用它,那将是理想的.但是我如何在C#客户端中执行此操作?
c# azure azure-storage azure-table-storage azure-blob-storage
我正在为我的 Azure AD B2C 登录/注册使用自定义页面 UI 模板,我想知道我需要CORS在我的 Azure Blob 存储帐户的配置中使用哪个域。
登录页面似乎来自https://login.microsoftonline.com. 这是正确的起源吗?
当我使用StorageClientMicrosoft 创建的命令行工具将我的自定义 UI 文件上传到我的 Azure Blob 存储时,我注意到它也将其设置*为Allowed Origins文档所指示的。这是文档:https : //docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-ui-customization-custom-dynamic#step-3-configure-cors-in-天蓝色应用服务
我不认为这真的很安全,我想将它限制在那些绝对必要的域中。
我想这样做有两个原因,这两个都很重要:
CORS是,在 Azure Blob 存储的服务级别而不是容器级别设置。我在同一个存储帐户下还有其他包含用户文件的容器。这些文件只能从我的应用程序访问,该应用程序创建了一个 SAS 以允许访问它们。如果我将Allowed Originsfor设置为CORSany,即使受保护的文件仍然需要 SAS,它也会降低我的应用程序的安全性。正如我之前所说,我希望尽可能保持安全。所以,问题是:我应该Allowed Origins在CORSAzure AD B2C 的配置中输入什么 URL ?我不只是想假设这是https://login.microsoftonline.com因为 Microsoft 通常会在他们的服务中进行一些重定向,而且我想确保包含所有必要的来源。
azure azure-active-directory azure-blob-storage azure-ad-b2c
我有一点问题。我的环境是.NET Core 2.1中的控制台应用程序。
看下面的代码:
private static void Main(string[] args)
{
try
{
Console.WriteLine($"Test starts: {DateTime.Now.ToString("o")}");
string connectionString = "[My connection string]";
string containerName = "mycontainer";
CloudStorageAccount account = CloudStorageAccount.Parse(connectionString);
CloudBlobClient serviceClient = account.CreateCloudBlobClient();
CloudBlobContainer container = serviceClient.GetContainerReference(containerName);
container.CreateIfNotExistsAsync().Wait();
CloudBlockBlob cloudBlockBlob = container.GetBlockBlobReference($"{containerName}/Test.txt");
CloudBlobStream cloudBlobStream = cloudBlockBlob.OpenWriteAsync().Result;
string json = JsonConvert.SerializeObject(cloudBlobStream);
Console.WriteLine($"Test ends: {DateTime.Now.ToString("o")}");
}
catch (Exception e)
{
string stackTrace = e.StackTrace;
while(e != null)
{
Console.WriteLine(e.Message);
e = e.InnerException;
}
Console.WriteLine(stackTrace);
}
Console.Write("Press any key to exit...");
Console.ReadKey();
} …Run Code Online (Sandbox Code Playgroud) 我实现了 Azure 功能。
我有下一个案例:
将其他内容保存到另一个 dynamo db 集合(输出参数)
[FunctionName("myFunction")]
[return: Blob("images-text-out/{name}.txt")]
public static string Run([BlobTrigger("samples-workitems/{name}", Connection = "StorageConnection")]Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob myBlob,
string name,
string blobTrigger,
[CosmosDB(
databaseName: "my-db-cosmos",
collectionName: "CollectionA",
ConnectionStringSetting = "CosmosDBConnection")] out dynamic processedFirst,
[CosmosDB(
databaseName: "my-db-cosmos",
collectionName: "CollectionB",
ConnectionStringSetting = "CosmosDBConnection")] out dynamic processedSecond,
ILogger log,
ExecutionContext context)
{
// . . .
myBlob.DownloadToStreamAsync(memoryStream).Wait();
// . . .
}
Run Code Online (Sandbox Code Playgroud)这工作正常。问题只是我无法利用异步调用的优势。原因很清楚,因为带有输出参数的方法不能是异步方法。
如何利用异步调用的优势实现具有多个输出的 azure 功能?
谢谢
当我尝试将 blob 上传到我的Azure Storage Account.
下面是我的代码。
private async Task UploadToAzureBlobStorage(string path, string fileName) {
try {
if (CloudStorageAccount.TryParse(StorageConnectionString, out CloudStorageAccount cloudStorageAccount)) {
var cloudBlobClient = cloudStorageAccount.CreateCloudBlobClient();
var cloudBlobContainer = cloudBlobClient.GetContainerReference(path);
var cloudBlockBlob = cloudBlobContainer.GetBlockBlobReference(fileName);
await cloudBlockBlob.UploadFromFileAsync(path);
}
else {
throw new CustomConfigurationException(CustomConstants.NoStorageConnectionStringSettings);
}
}
catch(Exception ex) {
throw new CustomConfigurationException($ "Error when uploading to blob: {ex.Message}");
}
}
Run Code Online (Sandbox Code Playgroud)
还有其他人遇到过同样的问题吗?
c# azure azure-storage azure-storage-blobs azure-blob-storage