解决您的问题的两步过程。
(1) 升级您的 S3cmd 安装。1.0.x 版没有设置字符集的能力。从github 上的 master安装。Master 包含对这个 (1)错误和这个 (2)错误的修复,这些错误导致无法识别内容类型的格式以及早期版本中的“定义前调用”问题。
要在 OSX 上从 master 安装 s3cmd,请执行以下操作:
git clone https://github.com/s3tools/s3cmd.git
cd s3cmd/
sudo python setup.py install (sudo optional based on your setup)
通过将以下内容添加到您的 .profile 或 .bashrc 或 .zshrc (同样,取决于您的系统),确保您的 python 库在您的路径中。
export PATH="/Library/Frameworks/Python.framework/Versions/2.7/bin:$PATH"
但是如果您使用自制软件可能会导致冲突 - 只需符号链接到可执行文件。
ln -s /Library/Frameworks/Python.framework/Versions/2.7/bin/s3cmd /usr/local/bin/s3cmd
关闭终端并重新打开。
s3cmd --version
仍然会输出
s3cmd version 1.5.0-alpha3 - but its the patched version.
(2) 升级后,使用:
s3cmd --acl-public --no-preserve --add-header="Content-Encoding:gzip" --add-header="Cache-Control:public, max-age=86400" --mime-type="text/html; charset=utf-8" put index.html s3://www.example.com/index.html
如果上传成功并将 Content-Type 设置为 "text/html; charset=utf-8" 但您在此过程中看到此错误:
WARNING: Module python-magic is not available...
我更喜欢没有 python-magic 的生活——我发现如果你不专门设置 mime-type,python-magic 经常会猜错。安装 python-magic 但一定要在 s3cmd 中设置 mime-type="application/javascript" 否则如果你在本地 gzip 你的 js,python-magic 会猜测它是 "application/x-gzip"。
安装 python-magic:
sudo pip install python-magic
PIP 与最近的 OSX 升级中断,因此您可能需要更新 PIP:
sudo easy_install -U pip
这样就可以了。所有这一切也适用于 S3cmd 同步 - 不仅仅是放。我建议您将 s3cmd sync 放入一个 thor 类型的任务中,这样您就不会忘记在任何特定文件上设置 mime 类型(如果您在 gzip 文件上使用 python-magic)。
这是将静态中间人站点部署到 s3 的示例 thor 任务的要点。 此任务允许您在本地重命名文件并使用 s3cmd sync 而不是使用 S3cmd put 一个接一个地重命名它们。