我发现了一堆示例,这些示例使用了我在应用程序中不可用的对象,并且似乎与我的 .NET Core Web API 版本不匹配。本质上,我正在开发一个项目,该项目在网页上有标签,并希望使用服务器中的流加载视频,而不是通过路径直接提供文件。原因之一是文件的来源可能会发生变化,并且通过路径提供它们并不是我的客户想要的。所以我需要能够打开流并异步写入视频文件。
由于某种原因,这会生成 JSON 数据,因此这是错误的。我正在从 Azure Blob 存储下载视频文件并作为流返回,但我只是不明白需要做什么才能将流式视频文件发送到 HTML 中的标记。
我的 API 控制器,
[AllowAnonymous]
[HttpGet("getintroductoryvideos")]
public async Task<Stream> GetIntroductoryVideos()
{
try
{
return _documentsService.WriteContentToStream().Result;
}
catch (Exception ex)
{
throw ex;
}
}
Run Code Online (Sandbox Code Playgroud)
我的服务班,
public async Task<Stream> WriteContentToStream()
{
var cloudBlob = await _blobService.GetBlobAsync(PlatformServiceConstants._blobIntroductoryVideoContainerPath + PlatformServiceConstants.IntroductoryVideo1, introductoryvideocontainerName);
await cloudBlob.FetchAttributesAsync();
var fileStream = new MemoryStream();
await cloudBlob.DownloadToStreamAsync(fileStream);
return fileStream;
}
Run Code Online (Sandbox Code Playgroud) 在工作中,我们在一个 Azure Blob 存储上托管多个 Angular JS 应用程序。有一个 Azure 函数充当代理并导航到合适的应用程序文件夹和 html 文件。
现在我想用 Angular 9 应用程序替换一些 Angular JS 应用程序。
但上述方法适用于 Angular JS 应用程序,但不适用于 Angular 9 应用程序。
如果我将 Angular 9 应用程序作为静态网站托管在不同的存储上,它就可以正常工作。但由于无法在 Azure 存储帐户上托管多个应用程序作为静态网站,因此我正在寻找解决此问题的方法。
是否可以在一个 Azure Blob 存储上托管多个 Angular 9 应用程序?如果是:我应该做什么才能使这项工作成功?
先感谢您!
我尝试了以下链接中的示例:将 Python DataFrame 作为 CSV 写入 Azure Blob但是 BlockBlobService 在 azure.storage.blob 中不再可用,因此我尝试使用 BlockBlobClient,并且可以使用以下代码创建、删除容器。但是,我找不到在容器中创建 blob 并将数据帧中的记录写入其中的方法,如上面链接中所述。请帮助我想创建一个 blob 并将数据框中的记录写入其中。
from azure.storage.blob import BlobServiceClient
blobService = BlobServiceClient.from_connection_string("**")
#blobService = BlobServiceClient(account_name=accountName, account_key=accountKey)
try:
new_container = blobService.create_container("containerfromblobservice")
properties = new_container.get_container_properties()
except ResourceExistsError:
print("Container already exists.")
Run Code Online (Sandbox Code Playgroud) 我们的 CI 管道需要将一些文件备份到 Azure Blob 存储。我正在使用 Azure CLI,如下所示:az storage blob upload-batch -s . -d container/directory --account-name myaccount
当授予服务主要贡献者访问权限时,它会按预期工作。但是,我想锁定权限,以便允许服务主体添加文件,但不能删除文件。为此需要什么权限?
Storage Blob Data Contributor我创建了一个自定义角色,赋予其与删除删除相同的权限。这(也只是Storage Blob Data Contributor直接使用角色)失败并出现Storage account ... not found. 好的,然后我继续向 blob 服务添加更多读取权限。还不够,现在我正处于它想做的地方Microsoft.Storage/storageAccounts/listKeys/action。但如果我让它访问存储密钥,那还有什么意义呢?有了存储密钥,SP 就可以完全访问该帐户,这是我首先要避免的。为什么az storage blob upload-batch需要钥匙?我可以防止这种情况发生吗?
我正在尝试使用此 github 中找到的 BlobServiceClient 库中的 ls_files 函数(https://github.com/Azure/azure-sdk-for-python/blob/master/sdk/storage/azure-storage-blob/samples/ blob_samples_directory_interface.py)。但是,当我运行代码时,出现错误:
“BlobServiceClient”对象没有属性“ls_files”
这是我的代码:
import os, uuid, sys
from azure.storage.blob import BlobClient, BlobServiceClient, ContainerClient, PublicAccess, __version__
from azure.storage.blob.blockblobservice import BlockBlobService
import re
account_name = ACCOUNT_NAME
account_key = ACCOUNT_KEY
connect_str = CONNECTION_STRING
account_url = ACCOUNT_URL
container_name = CONTAINER_NAME
file_path = FILE_PATH
block_blob_service = BlockBlobService(account_name = account_name, account_key = account_key)
blob_service_client = BlobServiceClient(account_url = account_url, connect_str = connect_str, container_name = container_name)
def list_filenames_in_blob(blob):
file_names = blob_service_client.ls_files(file_path)
return file_names
def run_action():
try:
for blob in …Run Code Online (Sandbox Code Playgroud) 我正在 AKS 中运行 Python 应用程序(作为作业,但并不重要),使用 Azure Python SDK 访问 blob 存储。我使用用户管理身份进行身份验证,ManagedIdentityCredential与client_idkwarg 一起使用(请参阅https://learn.microsoft.com/en-us/python/api/azure-identity/azure.identity.drivenidentitycredential?view=azure-python)。它能够成功查询 IMDS 端点并获取令牌,但我仍然遇到错误。有人知道我可能缺少什么设置吗?
关于用户管理身份的整体文档很少,特别是与 AKS 和 blob 存储相关的文档,以及此错误。
成功获取 IMDS 令牌:
2021-01-26 05:26:05,944 - azure.core.pipeline.policies.http_logging_policy - INFO - Request URL: 'http://REDACTED/metadata/identity/oauth2/token?api-version=REDACTED&resource=REDACTED&client_id=REDACTED'
2021-01-26 05:26:05,945 - azure.core.pipeline.policies.http_logging_policy - INFO - Request method: 'GET'
2021-01-26 05:26:05,945 - azure.core.pipeline.policies.http_logging_policy - INFO - Request headers:
2021-01-26 05:26:05,945 - azure.core.pipeline.policies.http_logging_policy - INFO - 'Metadata': 'REDACTED'
2021-01-26 05:26:05,945 - azure.core.pipeline.policies.http_logging_policy - INFO - 'User-Agent': 'azsdk-python-identity/1.5.0 Python/3.7.7 (Linux-4.15.0-1103-azure-x86_64-with-debian-9.12)'
2021-01-26 05:26:05,945 - …Run Code Online (Sandbox Code Playgroud) azure-active-directory azure-cli azure-blob-storage azure-managed-identity azure-aks
我正在将我的代码重构为 Azure.Storage.Blobs,因为 windowsAzure.Storage 正在贬值。但是我还没有找到删除“directoty”的方法。在旧图书馆你可以这样做:
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(Config.StorageConnStr);
CloudStorageAccount account = CloudStorageAccount.Parse(StorageConnection);
CloudBlobClient blobClient = account.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference(ExportContainerName);
CloudBlobDirectory folder = container.GetDirectoryReference(jobid.ToLower());
var blobs = folder.ListBlobs();
foreach (var blob in blobs)
{
((CloudBlob)blob).DeleteIfExists();
}
Run Code Online (Sandbox Code Playgroud)
但我在新包中看不到任何类似的代码。有什么指点吗?
我有一个代码可以读取文件目录并将文件上传到 Azure Blob 存储。它运行良好并且文件上传成功。但是,我需要帮助来修改此代码以运行异步操作以实现并发上传。
import os
import asyncio
import yaml
from azure.storage.blob import BlobServiceClient, BlobClient, ContainerClient, __version__
def load_config():
path_root = os.path.dirname(os.path.abspath(__file__))
with open(path_root + "/config.yaml", "r") as configfile:
return yaml.load(configfile, Loader=yaml.FullLoader)
def read_files(dir):
with os.scandir(dir) as files:
for filename in files:
if filename.is_file() and not filename.name.startswith('.'):
yield filename
def upload(files, connection_string, container_name):
container_client = ContainerClient.from_connection_string(connection_string, container_name)
print("Uploading images to remote blob storage")
for file in files:
blob_client = container_client.get_blob_client(file.name)
with open(file.path, "rb") as data:
blob_client.upload_blob(data)
print(f"{file.name} upload to remote …Run Code Online (Sandbox Code Playgroud) 我正在尝试将 blob 存储中的不同 csv 文件复制到自己的 sql 表中(我想自动创建这些表)。我见过很多问题,但没有看到任何答案。
目前我有一个 getmetadata 函数,它可以获取子项列表以获取文件名和 foreach 循环,但从那里我不知道如何将它们发送到每个文件的不同表。
我们的代码当前使用旧的 Microsoft.WindowsAzure.Storage 库来访问 Azure 中的 blob 存储。我正在尝试使用新的 v12 Azure.Storage.Blobs 库来替换旧的库,但是我不知道如何解密/加密 blob。MS 文档(https://learn.microsoft.com/en-us/azure/storage/blobs/storage-encrypt-decrypt-blobs-key-vault?tabs=dotnet)很有帮助地说,v12 代码片段不是尚未准备好,因此没有代码示例。
旧代码是这样的:
var tokenProvider = new AzureServiceTokenProvider();
var cloudResolver = new KeyVaultKeyResolver(
new KeyVaultClient.AuthenticationCallback(_tokenProvider.KeyVaultTokenCallback));
var encryptionThingy = await cloudResolver.ResolveKeyAsync(<Key Vault URL> + "/keys/" + <key name>, CancellationToken.None);
var policy = new BlobEncryptionPolicy(encryptionThingy, cloudResolver);
var options = new BlobRequestOptions() { EncryptionPolicy = policy };
await <ICloudBlob Instance>.DownloadToStreamAsync(<stream>, null, options, null);
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经得到了这里的新代码:
var azureKeys = new KeyClient(new Uri(<key vault url>), new DefaultAzureCredential());
var encKey = azureKeys.GetKey(<key name>);
ClientSideEncryptionOptions …Run Code Online (Sandbox Code Playgroud) azure ×5
python ×3
azure-cli ×2
c# ×2
angular ×1
angular9 ×1
asynchronous ×1
azure-aks ×1
csv ×1
dataframe ×1
encryption ×1
html5-video ×1