解决问题的两个步骤。
(1) 升级您的S3cmd安装程序。 版本1.0.x没有设置字符集的功能。从Github主分支安装。 这个主分支包含修复了这个(1)错误和这个(2)错误,之前版本中会导致无法识别内容类型格式和"在定义之前调用"的问题。
要在OSX上从主分支安装s3cmd,请执行以下操作:
git clone https://github.com/s3tools/s3cmd.git
cd s3cmd/
sudo python setup.py install (sudo optional based on your setup)
确保您的Python库在路径中,可以将以下内容添加到您的.profile、.bashrc或.zshrc中(根据您的系统而定)。
export PATH="/Library/Frameworks/Python.framework/Versions/2.7/bin:$PATH"
但是,如果你使用 Homebrew 的话可能会导致冲突,因此最好将可执行文件建立符号链接。
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或python-magic中设置mime-type =“application / javascript”,否则,如果您在本地gzip js,则python-magic将猜测它为“application / x-gzip”。
安装python-magic:
sudo pip install python-magic
最近的OSX升级可能导致PIP出现故障,因此您可能需要更新PIP:
sudo easy_install -U pip
这样就行了。这一切都适用于S3cmd同步 - 而不仅仅是上传。我建议您将s3cmd同步放入类似于thor的任务中,以便您不会忘记在任何特定文件上设置mime类型(如果您正在对gzipped文件使用python-magic)。
这是一个示例Thor任务的要点,用于将静态Middleman网站部署到S3。此任务允许您在本地重命名文件,并使用s3cmd sync而不是使用S3cmd put单独重命名它们。