一键上传文件至腾讯云 COS

2018-11-12 11:27:26 +08:00
 onlyice

周末做了一个一键上传文件至腾讯云 COS 的工具。地址在 https://github.com/onlyice/scoop-bucket/tree/master/scripts/cosupload。

v0.1

Windows 上一键上传文件到 COS。

效果

在文件管理器中上传文件至 COS:

在 IDE 中上传文件至 COS:

快速开始

如果你访问网络需要走代理(比如在公司环境中),先设置好 http_proxyhttps_proxy 环境变量。

这个工具使用 Scoop 简化安装,Scoop 要求 PowerShell 3.0 才可使用:

确保 PowerShell 满足要求后,打开一个新的 PowerShell 窗口,执行:

# 允许运行远程脚本
Set-ExecutionPolicy RemoteSigned -scope CurrentUser
# 安装 Scoop
iex (new-object net.webclient).downloadstring('https://get.scoop.sh')
# 添加 cosupload 所在的 bucket
scoop bucket add onlyice https://github.com/onlyice/scoop-bucket.git
# 安装 cosupload
scoop install cosupload

安装过程会自动安装 Python 3,并使用 pip 去安装 COS 的命令行工具 coscmd。如果 pip 的过程有失败,请先运行 scoop uninstall cosupload,再运行 scoop install cosupload 重新安装。

安装完成后,按屏幕提示进到 C:\Users\<username>\scoop\apps\cosupload\current 中双击运行 cosupload-install-context.reg,以将 "Upload to COS" 加入到资源管理器右键菜单中。如果后面你不需要这个右键菜单项了,你可以运行 cosupload-uninstall-context.reg

安装完成后,在命令行中会多了两个命令,分别是 coscmdcosuploadcosupload 是 PowerShell 写的脚本,本质上是调用 coscmd 做操作。

使用

第一次使用 cosupload 前,需要先参考 这里 设置 COS 所使用的参数配置,如:

coscmd config -r ap-guangzhou -a <ak> -s <sk> -b <bucket>

配置文件默认会放在 ~\.cos.conf 作为全局配置。如果你在一些场景想用单独的配置,可以使用 -c 参数指定配置文件位置:

coscmd -c some-other-dir\.cos.conf config -r ap-guangzhou -a <ak> -s <sk> -b <bucket>

cosupload 运行时会从被上传文件所在目录起,一级级往上找 .cos.conf 文件,作为上传所使用的配置文件。

配置好后,就可以在文件管理器中右键,选择 "Upload to COS" 了。上传完后会自动设置一个 wget 命令行在剪贴板中。

命令行使用

cosupload <file-to-upload> <key-in-bucket>

如:

cosupload my-file.txt another-name-in-bucket.txt

会把 my-file.txt 上传到 bucket 中的 another-name-in-bucket.txt 位置。当然你也可以用同一个文件名。

IDE 中使用

IDE 大多数提供了使用外部工具的能力。比如 JetBrains 系的 External Tools 功能,可以用这种方式配置:

问题排查

由于底层用的 coscmd 在错误处理上做得不好,如果出现了奇怪的问题,比如文件传不上去,请将本机的 cos_cmd.py(一般位于 ~\scoop\apps\python\3.7.0\Lib\site-packages\coscmd\cos_cmd.py)的这行 代码,从 return 0 改为 raise,再尝试去 cosupload 看错误信息。

5223 次点击
所在节点    分享创造
13 条回复
o0
2018-11-12 11:31:35 +08:00
要是有一个 windows 下自动与 oss 同步文件的客户端就好了
o0
2018-11-12 11:31:46 +08:00
纠正:COS
MyFaith
2018-11-12 11:42:19 +08:00
@o0 阿里云叫 OSS,腾讯云叫 COS,没错吧。
onlyice
2018-11-12 13:33:08 +08:00
@o0 目测 COS 不愿意这么搞,这样增加了它的网盘 / CDN 属性
toou123
2018-11-12 14:17:58 +08:00
记得官方就有工具啊
lshero
2018-11-12 14:25:22 +08:00
@o0 COS 兼容 S3 的
o0
2018-11-12 14:34:38 +08:00
@lshero 那就是说可以用为 S3 做的客户端来设置同步 COS ?空了试试
onlyice
2018-11-12 15:21:20 +08:00
@toou123 对,官方有 coscmd,我就是基于这个做了层封装
RangerWolf
2018-11-12 17:27:13 +08:00
问一下, 能做一个 UI 么? 我在写博客的时候, 需要把图片上传到 COS, 每次都是手动, 包括:

1. 为这一篇文章创建一个单独的文件夹\目录 (方便以后自己管理)
2. 手动选择一个或者多个图片上传
3. 稍等一会, 刷新之后 ,替换本地 markdown 之中的图片路径(从本地替换到线上的 CDN 路径)
onlyice
2018-11-12 18:46:45 +08:00
@RangerWolf #9 GUI 的话,官方这个 COSBrowser 能否满足你需求?
https://cloud.tencent.com/document/product/436/11366

我插入博客图片的工作流是:

1. 在 VSCode 上使用 Markdown Paste[1] 插件粘贴图片,它会自动帮你生成 ![](images/2018/10/my.png),并且可以配置图片保存位置
2. 写好文章后,统一把图片上传 COS
3. 批量将 ![](images/2018/10/my.png) 文本替换成 ![]({{ site.image_cdn }}/images/2018/10/my.png),site.image_cdn 是我设置在 Jekylll _config.yml 中的变量,指向 COS bucket 的域名

[1]: https://marketplace.visualstudio.com/items?itemName=telesoho.vscode-markdown-paste-image
mingyun
2018-11-12 22:52:58 +08:00
能支持 chocolatey 安装吗?
比如 rg 同时支持 choco 和 scoop
onlyice
2018-11-13 08:17:10 +08:00
@mingyun 没有精力去做 chocolatey 的包,如果你有兴趣,可以看看 GitHub 仓库中的 cosupload.json,比较简单。选择用 Scoop 也是因为它的机制足够简单,我可以一两个小时搞明白用起来
RangerWolf
2018-11-13 10:01:31 +08:00
@onlyice 感谢, 原来现在官方还有这个 browser 工具。 看起来能加速我的一些操作了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/506919

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX