我正在从 BlockBlob 读取文件。文件大小保证小于 64 MB。因此它是单块操作。读取文件后,我更改了其中的某些部分,并通过 CloudBlockBlob 的 UploadFromStream 函数重新上传。我的问题是“对于小于 64 MB 的大小,CloudBlockBlob 的 UploadFromStream 函数是否是原子的?”。在写入过程中发生异常后,是否有可能在天蓝色存储上有损坏的文件?
注意:我对 AppendBlobs 提出了类似的问题,并得到了它是原子的答案。
每当我通过 Azure 门户创建新的存储(经典)帐户时,我总是会遇到根本不创建表/队列/文件存储的问题,使帐户仅保留 Blob 存储,如下所示:
而不是像这样(单独的帐户):
我已经尝试过多次,并且都得到了相同的结果。我不明白我怎么会犯这个错误,因为表单上只有 4 个选项来创建帐户,而且它们都不能管理帐户的内容。
当我尝试在这个新帐户中创建新表或队列时,出现错误502 Bad Gateway。
我在这里错过了什么吗?谁能告诉我如何将所需的存储类型添加到帐户中。
我正在使用 Microsoft.WindowsAzure.Storage.DataMovement 库进行目录上传,如下所示
TransferManager.Configurations.ParallelOperations = 64;
UploadDirectoryOptions options = new UploadDirectoryOptions()
{
ContentType = "image/jpeg",
Recursive = true,
};
context.FileTransferred += FileTransferredCallback;
context.FileFailed += FileFailedCallback;
context.FileSkipped += FileSkippedCallback;
await TransferManager.UploadDirectoryAsync(sourceDir, destDir, options:
options, context: context, cancellationToken: cts.Token);
Run Code Online (Sandbox Code Playgroud)
我认识到,如果我更改了同名的图像,函数将忽略该图像并在文件存在时返回异常。如果 datemodified 更改,如何替换图像?首先,我本地电脑上的 datemodified 和 azure 应该同步。
我们正在尝试将数据从本地 SQL Server 复制到 Azure Blob 存储。但我们面临以下错误:
活动 Copy_741 失败:“接收器”端发生故障。ErrorCode=UserErrorJreNotFound,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=找不到 Java 运行时环境。,Source=Microsoft.DataTransfer.Common,''Type=System.DllNotFoundException,Message=无法加载 DLL “jvm.dll”:找不到指定的模块。(HRESULT 异常:0x8007007E),Source=Microsoft.DataTransfer.Richfile.HiveOrcBridge,'
在其他一些帖子中,我们发现需要在 Integration Runtime 节点上安装 Microsoft Visual C++ 2010 Redistributable Package,但最新版本已经安装。
我们正在使用 Azure 数据工厂 v2。此外,我们能够毫无问题地将数据从 Azure SQL Server 传输到 Blob
我很难弄清楚出了什么问题。我的应用程序访问 api 来获取文档。发生的情况是下载开始,但挂起。最终它会完成(要么有错误,要么完全完成),但是当我尝试打开 pdf 时,我收到“无法打开 pdf”或类似的信息。它在本地工作。
我的控制器:
[Route("api/listing/attachment")]
[HttpGet]
public async Task<IHttpActionResult> GetAttachmentAsync(string fileName)
{
var attachment = await _repository.GetAttachmentAsync(fileName);
var response = HttpContext.Current.Response;
response.Clear();
response.ContentType = "application/x-download";
var removePath = fileName.Substring(fileName.IndexOf("/", fileName.IndexOf("/", StringComparison.Ordinal) + 1, StringComparison.Ordinal) + 1);
response.AddHeader("content-disposition", string.Format("attachment; filename={0}", removePath));
response.AddHeader("content-length", attachment.Length.ToString());
response.BinaryWrite(attachment);
response.Flush();
return null;
}
Run Code Online (Sandbox Code Playgroud)
我的存储库:
public async Task<byte[]> GetAttachmentAsync(string fileName)
{
var container = _blobClient.GetContainerReference(_containerName);
var blockBlob = container.GetBlockBlobReference(fileName);
using (var memoryStream = new MemoryStream())
{
await blockBlob.DownloadToStreamAsync(memoryStream);
return memoryStream.ToArray();
}
}
Run Code Online (Sandbox Code Playgroud) 我有多个 Azure 存储帐户。我想在 Azure 存储 blob 容器内创建文件夹结构,并使用 PowerShell 向其中插入一些数据。
那么,任何人都可以建议我如何编写 PowerShell 脚本来在 blob 容器内创建子目录并向其中插入一些数据。
我有一个带有 blob (/images/filename) 的 Azure 存储容器。文件名(uri)在创建时存储在数据库中,来自文件上传保存函数:
blob.UploadFromStream(filestream);
string uri = blob.Uri.AbsoluteUri;
return uri;
Run Code Online (Sandbox Code Playgroud)
文件上传工作正常,当使用 SAS 密钥下载传递到客户端时也工作正常。
来删除图像我有一个辅助函数,该函数取自此处的 MS 示例:MS Github 示例 这是该函数:
internal bool DeleteFile(string fileURI)
{
try
{
Uri uri = new Uri(fileURI);
string filename = Path.GetFileName(uri.LocalPath);
CloudBlockBlob fileblob = container.GetBlockBlobReference(filename);
fileblob.Delete();
bool res = fileblob.DeleteIfExists();
return res; //Ok
}
catch(Exception ex)
{
Console.WriteLine(ex);
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
这一切都在一个助手类中,该类的开头如下:
public class AzureHelpers
{
private string connection;
private CloudStorageAccount storageAccount;
private CloudBlobClient blobClient;
private CloudBlobContainer container;
public AzureHelpers()
{ …Run Code Online (Sandbox Code Playgroud) 在v11 SDK for .NET中,我能够使用托管身份令牌来访问 Azure blob:
var token = await new AzureServiceTokenProvider().GetAccessTokenAsync("https://storage.azure.com/");
var tokenCredential = new TokenCredential(token);
var storageCredentials = new StorageCredentials(tokenCredential);
var blob = new CloudBlobContainer(new Uri("https://some_storage.blob.core.windows.net/some_container"), storageCredentials);
Run Code Online (Sandbox Code Playgroud)
现在我想切换到v12 SDK,但不明白如何对BlobServiceClient.
我已经创建了 Azure blob 存储,现在我想将文件推送到存储以进行身份验证,需要使用客户端证书。
知道怎么做吗?
我有一个 mp4 视频,已上传到 Azure Blob 存储(块、存储 v2)。我无法使用<video>标签提供视频而不会出现播放延迟,因为视频已从服务器完全下载(带有 200 响应状态代码)。
(更糟糕的是,虽然与我的问题不完全相关,因为我认为这更多是浏览器问题,但视频设置为循环,并且每次循环都会重新下载。)
相反,我想使用部分内容范围来流式传输视频,以便立即开始播放。
我尝试直接获取视频,为<video>标签src属性提供绝对 URI;我还尝试通过 ASP .NET Core 3.1 控制器方法提供视频,返回 aFileStreamResult并将enableRangeProcessing参数设置为true. 这是该代码:
public async Task<IActionResult> GetVideo(string videoUrl)
{
var httpClient = new HttpClient();
var stream = await httpClient.GetStreamAsync(videoUrl);
return File(stream, new MediaTypeHeaderValue("video/mp4").MediaType, true);
}
Run Code Online (Sandbox Code Playgroud)
似乎无论我尝试什么,我都无法获得带有 206 状态代码的范围响应。我已经看到了有关使用 Azure 媒体服务的建议,但这似乎有点矫枉过正,这应该是只需支持而无需合并其他服务的东西。
任何帮助/建议将不胜感激 - 谢谢!
c# video-streaming html5-video azure-blob-storage asp.net-core-3.1
azure ×7
c# ×5
asynchronous ×1
atomic ×1
azureportal ×1
html5-video ×1
powershell ×1
stream ×1