无法使用gsutil将文件上传到GCS

时间:2014-07-14 23:41:59

标签: google-cloud-storage gsutil

复制文件://InstreamImpression.csv.gz [Content-Type = application / octet-stream] ...

AccessDeniedException:401 Login Requiredfe13d1e0fb408639_4 ...:46.75 MB / 46.77 MB

CommandException:无法传输1个文件/对象。

似乎整个对象正在转移,但最后给出了401错误。而且它已经发生了一段时间。

Ran" gcloud auth login"几次。但仍然是同样的错误

我可以从不同的机器上传文件。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

这是一个奇怪的案例。

该文件位于Windows服务器下的" D:"驱动器,我从那里运行gsutil工具。

即。 D:> gsutil -m cp xyz.csv gs:\ somebucket \

我对D:drive

没有足够的许可

但是一旦我从" C:"运行相同的命令推动它运作良好

即 C:> gsutil -m cp" D:\ xyz.csv" GS:\ somebucket \

答案 1 :(得分:0)

这可能是gsutil / boto如何处理Windows上的OS路径分隔符的问题,如引用here。这最终应该合并到sdk工具中,但在此之前,以下内容应该有效:

转到
谷歌-云SDK \平台\的gsutil \ THIRD_PARTY \博托\博托\ pyami \ config.py

并替换该行:

for path in os.environ['BOTO_PATH'].split(':'):

使用:

for path in os.environ['BOTO_PATH'].split(os.path.pathsep):

接下来,转到
谷歌云-SDK \ BIN \引导\ gsutil.py

替换使用':'

的行
if boto_config:
      boto_path = ':'.join([boto_config, gsutil_path])
    elif boto_path:
      # this is ':' for windows as well, hardcoded into the boto source.
      boto_path = ':'.join([boto_path, gsutil_path])
    else:
      path_parts = ['/etc/boto.cfg',
                    os.path.expanduser(os.path.join('~', '.boto')),
                    gsutil_path]
      boto_path = ':'.join(path_parts)

if boto_config:
      boto_path = os.path.pathsep.join([boto_config, gsutil_path])
    elif boto_path:
      # this is ':' for windows as well, hardcoded into the boto source.
      boto_path = os.path.pathsep.join([boto_path, gsutil_path])
    else:
      path_parts = ['/etc/boto.cfg',
                    os.path.expanduser(os.path.join('~', '.boto')),
                    gsutil_path]
      boto_path = os.path.pathsep.join(path_parts)

重新加载cmd,错误应该消失。