cp replace命令正在更改内容类型

时间:2019-02-24 15:11:53

标签: amazon-web-services amazon-s3

我正在执行Visual Studio Online发布任务中的cp来更改--cache-control元数据,但同时还将文件的内容类型更改为text/plain。 这是命令:

  s3://sourcefolder/ s3://sourcefolder/ --exclude "*" -- 
  include "*.js" --include "*.png" --include "*.css" --include 
  "*.jpg" --include "*.gif" --include "*.eot" --include 
  "*.ttf" --include "*.svg" --include "*.woff" --include 
  "*.woff2" --recursive --metadata-directive REPLACE --cache- 
  control max-age=2592000,private

在执行此命令之前,我的javascript文件具有正确的内容类型:text/javascript,但是在执行此命令后,它更改为text/plain。如何避免这种情况?

enter image description here

1 个答案:

答案 0 :(得分:2)

我看不到针对您的特定用例的一种方法。这主要是因为不同的文件具有不同的内容类型值。我认为aws s3 cp或aws s3同步操作对您不起作用。这是由--metadata-directive REPLACE标志引起的,该标志实际上删除了所有元数据,并且由于您未提供content-type,因此默认为text / plain。但是,如果您将其设置为text / javascript,则所有文件都将在其元数据中包含该文件,这显然不适用于图像和CSS文件。

但是,我将提出一个适合您的解决方案。请尝试使用最新版本的s3cmd usage,因为它具有Modify命令,您可以按以下方式使用它:

    ./s3cmd --recursive modify --add-header="Cache-Control:max-age=25920" \
            --exclude "*" \
            --include ... \
            s3://yourbucket/

有关s3cmd使用情况和可用标志的更多信息-> package