【问题标题】:AzCopy - how to upload single file to a container using SASAzCopy - 如何使用 SAS 将单个文件上传到容器
【发布时间】:2019-08-12 22:58:21
【问题描述】:

我有一个用于容器的 SAS(仅限 WRITE,但我也尝试 READ-WRITE-LIST)。我需要将单个文件上传到该容器。所以我为此使用 AzCopy:

AzCopy /Source:./ /Dest:https://account.blob.core.windows.net/container/?sv=2018-03-28&si=write&sr=c&sig=****** /Pattern:somefile.ext /V:./AzCopy.log

我尝试了另一个版本:

AzCopy /Source:somefile.ext /Dest:https://account.blob.core.windows.net/container/somefile.ext /DestSAS:******

但这也不起作用。

我尝试了两个 AzCopy 版本 - 7.1.3 和 8.1!我还应该尝试什么?

顺便说一句,使用 Powershell 它就像一个魅力,具有相同的 SAS 令牌! Windows 10 最新版本。

更新

日志(在完全不同的机器上制作):

[2019.03.22 06:39:41.551+03:00] >>>>>>>>>>>>>>>> [2019.03.22 06:39:41.561+03:00][详细] 完成:0 个文件,0 个 B;平均速度:0 乙/秒。 [2019.03.22 06:39:41.569+03:00][详细] 8.1.0:AzCopy /来源:somefile.ext /目的地:https://account.blob.core.windows.net/korch/somefile.ext /DestSAS:****** /V:./AzCopy with SAS.log [2019.03.22 06:39:41.589+03:00][ERROR] 读取重启时出错 来自“C:\Users\user\AppData\Local\Microsoft\Azure\AzCopy”的日志。 详细错误:解析日志文件时出错:日志文件是 由不同版本的 AzCopy 生成。 [2019.03.22 06:39:43.175+03:00][详细][提示]你想覆盖 日记开始新的操作?选择是覆盖,选择否 取消当前操作。 (是/否):是 [2019.03.22 06:39:43.230+03:00][详细] 尝试解析地址“somefile.ext” 将目录作为候选位置成功。 [2019.03.22 06:39:43.232+03:00][详细] 尝试解析地址“somefile.ext” 将单个文件作为候选位置成功。 [2019.03.22 06:39:43.239+03:00][详细] 源被解释为本地文件: G:\1\somefile.ext。 [2019.03.22 06:39:43.260+03:00][详细] 尝试 解析地址 'https://account.blob.core.windows.net/korch/somefile.ext' 到 目录作为候选位置成功。 [2019.03.22 06:39:43.269+03:00][VERBOSE] 尝试解析地址 'https://account.blob.core.windows.net/korch/somefile.ext' 为单 文件作为候选位置成功。 [2019.03.22 06:39:43.270+03:00][VERBOSE] 将目的地解释为单个文件 因为提供的源是单个文件。 [2019.03.22 06:39:43.271+03:00][VERBOSE] 目的地被解释为云 斑点:https://account.blob.core.windows.net/korch/somefile.ext。 [2019.03.22 06:39:43.942+03:00][详细] 开始传输: G:\1\somefile.ext => https://account.blob.core.windows.net/korch/somefile.ext [2019.03.22 06:39:44.149+03:00][详细] 传输失败:G:\1\somefile.ext => https://account.blob.core.windows.net/korch/somefile.ext。 [2019.03.22 06:39:44.158+03:00][ERROR] 发生未知错误:传输 失败的。服务器未能验证请求。确保值 授权标头的格式正确,包括签名。 HttpStatusMessage:服务器未能验证请求。确保 Authorization 标头的值正确形成,包括 签名。 RequestId:76ffafce-901e-0132-6460-e00b82000000 时间:周五,22 2019 年 3 月 06:39:44 GMT [2019.03.22 06:39:44.161+03:00] 转移 概括: -----------------传输的文件总数:1传输成功:0传输跳过:0传输失败:1经过时间: 00.00:00:02

【问题讨论】:

  • 您还需要为源指定 SAS 吗?
  • 源是本地文件!
  • 您收到的错误信息是什么?
  • 未经授权的标头。
  • 您能否编辑您的问题并包含完整的错误消息?我尝试了您上面使用的两个命令,并且能够成功上传本地文件。

标签: azure azure-blob-storage azcopy


【解决方案1】:

好的,我为 AzCopy 单个文件创建了一个 .CMD 文件。但我不知道我必须在 Windows 批处理文件中转义 % 。这就是最后 SAS 令牌不正确的原因。

【讨论】:

    【解决方案2】:

    这是我尝试过的有效方法。

    AzCopy /Source:D:\temp /Dest:https://account-name.blob.core.windows.net/blob-container-name /DestSAS:"?se=2019-03-30T18%3A30%3A00Z&sp=rw&sv=2018-03-28&sr=c&sig=xxxxx...%3D" /Pattern:test.txt
    
    AzCopy /Source:D:\temp2 /Dest:"https://account-name.blob.core.windows.net/blob-container-name?se=2019-03-30T18%3A30%3A00Z&sp=rw&sv=2018-03-28&sr=c&sig=xxxxx...%3D" /Pattern:test.log
    

    我注意到的一件事是,如果我只包含Write 权限,操作就会失败。我必须在我的 SAS 中添加 Read 权限才能使操作成功。

    此外,我必须在双引号中包含 SAS 令牌。

    【讨论】:

    • 您确定您的 SAS 令牌是使用 容器 策略制作的吗?
    • 我没有使用策略。我创建了一个对 blob 容器具有读写权限的临时 SAS 令牌。
    • 好的,我想我找到了问题所在。我制作了一个带有参数的 .cmd 文件,并且 SAS 令牌应该在批处理文件中转义... Gr ....!
    • 太棒了!请包括您的解决方案作为答案。它可能会帮助其他一些使用命令文件方法的人。
    猜你喜欢
    • 2020-12-09
    • 1970-01-01
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 2015-03-01
    • 2021-03-05
    • 1970-01-01
    相关资源
    最近更新 更多