解决您的问题的两步过程。
(1) 升级您的 S3cmd 安装。 1.0.x 版没有设置字符集的能力。从master on github 安装。 Master 修复了这个 (1) bug 和这个 (2) bug,导致无法识别内容类型的格式以及早期版本中的“定义前调用”问题。
要在 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)。
This is a gist of an example thor task for deploying a static Middleman site to s3. 此任务允许您在本地重命名文件并使用 s3cmd sync 而不是使用 S3cmd put 一个一个地重命名它们。