【问题标题】:Error when trying to upload file to Azure File Share尝试将文件上传到 Azure 文件共享时出错
【发布时间】:2021-01-10 09:59:33
【问题描述】:

我正在尝试将 xml 文件上传到存储帐户中的 Azure 文件共享,但我不断收到此错误:

指定的范围对于资源的当前大小无效。

我可以从同一个共享下载文件,所以连接本身可以工作

我创建了一个如下所示的 xml 文件:

<?xml version="1.0" encoding="utf-16"?>
<WebOrderList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <WebOrder>
    <OrderId>1</OrderId>
    <Info>info about order</Info>
    <Description>testing</Description>
    <WebItemListWebItem>
      <ItemNo>321</ItemNo>
      <ParentID>0</ParentID>
    </WebItemListWebItem>
  </WebOrder>
</WebOrderList>

上传内容的方法如下:

public async Task UploadFile(string content, string path, string name)
{
    var fileClient = new ShareFileClient(_connectionString, _shareName, path);
    byte[] byteArray = Encoding.UTF8.GetBytes(content);
    using (var stream = new MemoryStream(byteArray))
    {
         await fileClient.UploadAsync(stream);
    }
}

其中内容是上面的 xml 字符串,路径是 /orders/fromwebshop,它是文件共享上的现有文件夹,名称是 order-1.xml。

错误:

Windows-Azure-File/1.0,Microsoft-HTTPAPI/2.0

x-ms-error-code: InvalidRange

日期:格林威治标准时间 2020 年 9 月 24 日星期四 06:39:39

内容长度:249

内容类型:应用程序/xml

更新: 我发现这行得通:

如果你想复制:

  //ExampleData
    //Content = string as Xml.
    //Path = "$"/orders/fromwebshop""
    //Name = "$"order-{order.WebOrder[0].OrderId}.xml"
    public async Task UploadFile(string content, string path, string name)
    {
        var newMove = new ShareFileClient(_connectionString, _shareName, $"{path}/{name}");
        byte[] byteArray = Encoding.UTF8.GetBytes(content);
        await newMove.CreateAsync(byteArray.Length);
        using (var stream = new MemoryStream(byteArray))
        {
            await newMove.UploadAsync(stream);
        }
    }

【问题讨论】:

  • 错误信息表明服务器有大小限制。您可能需要在上传之前压缩文件以减小大小。您可以添加:.setContentEncoding("gzip")。请参阅:docs.microsoft.com/en-us/java/api/…
  • 它的 249 字节。不可能吗? :D
  • 内容类型错误。您正在上传文件,文件中的数据无关紧要。您在代码中的哪个位置指定了 XML?
  • 我猜它从名字上看出来了?我想我发现了错误。我似乎不能在 CreateAsync 之前使用 UploadAsync。但是 createAsync 在方法中需要一个“maxsize”。我猜 bytearray.length 是正确的大小
  • 上传有一个文件源和文件目标是文件名。不知道为什么你有一个 MemoryStream。

标签: c# xml azure file-upload


【解决方案1】:

更新: 我发现这行得通:

如果要复制代码:

  //ExampleData
    //Content = string as Xml.
    //Path = "$"/orders/fromwebshop""
    //Name = "$"order-{order.WebOrder[0].OrderId}.xml"
    public async Task UploadFile(string content, string path, string name)
    {
        var newMove = new ShareFileClient(_connectionString, _shareName, $"{path}/{name}");
        byte[] byteArray = Encoding.UTF8.GetBytes(content);
        await newMove.CreateAsync(byteArray.Length);
        using (var stream = new MemoryStream(byteArray))
        {
            await newMove.UploadAsync(stream);
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-26
    • 2021-05-03
    • 2021-12-05
    • 1970-01-01
    • 2018-10-16
    • 2020-11-11
    • 1970-01-01
    • 2016-03-27
    相关资源
    最近更新 更多