我们正在尝试在部署脚本中使用AZCopy将一些资产直接上传到我们的存储中,该存储通过Azure上的CDN公开。
当我们上传文件时,内容类型为application/octet-stream
,但我们需要能够通过示例text/javascript
指定
有没有办法实现这个目标?我们不必为每种文件类型多次调用AZCopy。
答案 0 :(得分:15)
最新版本的AzCopy(v3.1.0和v4.1.0-preview)包含了对设置内容类型的支持,请在http://aka.ms/azcopy下载并查找更多详细信息。
更具体地说,您可以通过选项/ SetContentType设置内容类型:[content-type]。
AzCopy / Source:D:\ test \ / Dest:https://myaccount.blob.core.windows.net/myContainer/ / DestKey:key / Pattern:ab / SetContentType
AzCopy / Source:D:\ test \ / Dest:https://myaccount.blob.core.windows.net/myContainer/ / DestKey:key / Pattern:ab / SetContentType:video / mp4
如果未在/ SetContentType选项中指定“Content-Type”,则AzCopy将根据其文件扩展名设置每个blob的内容类型。要为所有blob设置相同的内容类型,必须显式指定“Content-Type”的值,例如/ SetContentType:video / mp4。 请注意,此选项仅在将blob上载到存储端点时适用。
答案 1 :(得分:2)
我找到了使用Azure Pipelines完成此操作的方法:
- task: AzureFileCopy@4
displayName: "Azure Storage - copy new files"
inputs:
SourcePath: '$(System.DefaultWorkingDirectory)/dist/*'
azureSubscription: 'johnykes-PAYG(xxxxx-b455-4c4d-a8f8-c2a5fd479f10)'
Destination: 'AzureBlob'
storage: 'johnykeschatfrontend'
ContainerName: '$web'
- task: AzureFileCopy@4
displayName: "Azure Storage - overwrite .js files with correct Content Type"
inputs:
SourcePath: '$(System.DefaultWorkingDirectory)/dist/*.js'
azureSubscription: 'johnykes-PAYG(xxxxx-b455-4c4d-a8f8-c2a5fd479f10)'
Destination: 'AzureBlob'
storage: 'johnykeschatfrontend'
ContainerName: '$web'
AdditionalArgumentsForBlobCopy: '--content-type "application/javascript"'
请告诉我您是否找到使用Azure CLI或以递归方式(对于所有.js文件)执行此操作的方法。
答案 2 :(得分:1)
查看AZCopy中可用的选项,我不认为它是直接可行的。一旦上传,您需要编写一些代码来设置blob的内容类型。
您可以做的是获取所需容器中的blob列表。 Blob列表将为您提供每个blob的当前内容类型。然后,您需要遍历此列表,从文件扩展名(Get MIME type from filename extension)中找出内容类型,然后使用更新的内容类型设置blob的属性。
答案 3 :(得分:1)
要为仍然发现此问题的任何人在此处添加其他答案,这里有一个AzCopyConfig.json文件,您可以在其中为每个文件扩展名指定MIME类型。
AzCopy基于JSON文件来确定Blob的内容类型,该JSON文件将内容类型存储到文件扩展名映射中。此JSON文件名为AzCopyConfig.json,位于AzCopy目录中。如果您的文件类型不在列表中,则可以将映射附加到JSON文件:
{ "MIMETypeMapping": { ".myext": "text/mycustomtype", . . } }