gpt4 book ai didi

azure - 通过 Azure.Storage.Files.Shares 库将 Azure 分块上传到文件共享时出现问题

转载 作者:行者123 更新时间:2023-12-04 15:59:49 24 4
gpt4 key购买 nike

我正在尝试使用 Azure.Storage.Files.Shares 库将文件上传到 Azure 文件共享。

如果我不对文件进行分块(通过进行单个 UploadRange 调用),它可以正常工作,但对于超过 4Mb 的文件,我无法使分块工作。下载时文件大小相同,但无法在查看器中打开。

我无法在大文件上设置较小的 HttpRange,因为我收到“请求正文太大”错误,因此我将文件流拆分为多个迷你流,并上传每个迷你流的整个 HttpRange

        ShareClient share = new ShareClient(Common.Settings.AppSettings.AzureStorageConnectionString, ShareName());
ShareDirectoryClient directory = share.GetDirectoryClient(directoryName);

ShareFileClient file = directory.GetFileClient(fileKey);
using(FileStream stream = fileInfo.OpenRead())
{
file.Create(stream.Length);

//file.UploadRange(new HttpRange(0, stream.Length), stream);

int blockSize = 128 * 1024;

BinaryReader reader = new BinaryReader(stream);
while(true)
{
byte[] buffer = reader.ReadBytes(blockSize);
if (buffer.Length == 0)
break;

MemoryStream uploadChunk = new MemoryStream();
uploadChunk.Write(buffer, 0, buffer.Length);
uploadChunk.Position = 0;

file.UploadRange(new HttpRange(0, uploadChunk.Length), uploadChunk);
}

reader.Close();
}

上面的代码上传没有错误,但从 Azure 下载图像时它已损坏。

有人有什么想法吗?感谢您提供的任何帮助。

干杯

史蒂夫

最佳答案

我能够重现该问题。基本上问题出在以下代码行:

new HttpRange(0, uploadChunk.Length)

本质上,您总是将内容设置在相同的范围内,这就是文件损坏的原因。

请尝试下面的代码。它应该有效。我在这里所做的是定义 HTTP 范围偏移量,并根据已写入文件的字节数不断移动它。

        using (FileStream stream = fileInfo.OpenRead())
{
file.Create(stream.Length);

//file.UploadRange(new HttpRange(0, stream.Length), stream);

int blockSize = 1 * 1024;
long offset = 0;//Define http range offset
BinaryReader reader = new BinaryReader(stream);
while (true)
{
byte[] buffer = reader.ReadBytes(blockSize);
if (buffer.Length == 0)
break;

MemoryStream uploadChunk = new MemoryStream();
uploadChunk.Write(buffer, 0, buffer.Length);
uploadChunk.Position = 0;

HttpRange httpRange = new HttpRange(offset, buffer.Length);
var resp = file.UploadRange(httpRange, uploadChunk);
offset += buffer.Length;//Shift the offset by number of bytes already written
}

reader.Close();
}

关于azure - 通过 Azure.Storage.Files.Shares 库将 Azure 分块上传到文件共享时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61001985/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com