svg文件将作为“文件”上传;应用程序/八位字节流“;而不是",;图像/svg+;xml";

svg文件将作为“文件”上传;应用程序/八位字节流“;而不是",;图像/svg+;xml";,svg,artifactory,mime-types,storybook,Svg,Artifactory,Mime Types,Storybook,我正在使用Storybook创建一些故事,并将它们发布到我们的服务器上 我们目前使用命令构建静态文件。当使用指向我们构建的静态文件的命令时,一切正常(即svg图标呈现良好) 当我们将这些静态文件传输到我们用来服务这些静态文件的服务器时,就会出现问题 我们使用以下脚本执行此操作: find $name -type f -exec curl --fail --silent --show-error --output /dev/null -u CREDENTIALS --ftp-create-dirs

我正在使用Storybook创建一些故事,并将它们发布到我们的服务器上

我们目前使用命令构建静态文件。当使用指向我们构建的静态文件的命令时,一切正常(即svg图标呈现良好)

当我们将这些静态文件传输到我们用来服务这些静态文件的服务器时,就会出现问题

我们使用以下脚本执行此操作:

find $name -type f -exec curl --fail --silent --show-error --output /dev/null -u CREDENTIALS --ftp-create-dirs -T {} ftp-server/{} \;
仅供参考。。。我没有在上面的脚本中公开我们的凭据或FTP服务器。这个脚本也取自stackoverflow,它基本上允许我们将所有静态文件传输到服务器

当从服务器提供服务时,SVG图标不会加载到我们的故事中,因为它们的MIME类型设置为
application/octet stream
,而我们希望它们是
image/SVG+xml

在运行文件传输命令之前,我确保SVG包含正确的MIME类型,即
image/SVG+xml
。此外,在本地提供这些静态文件时,SVG呈现良好,因此这些SVG最初包含正确的MIME类型。问题发生在文件传输过程中,它以某种方式将MIME类型从
image/svg+xml
转换为
application/octet-stream

我确保我们使用的是正确的curl版本,即7.75版,因此svg内容类型应该是。我还尝试通过标题ie
-H“content-type:image/svg+xml”
设置内容类型,我遇到了同样的问题

以下是我们FTP其中一个svg时的日志:

12:39:07 > PUT ftp-server/static/media/svg-defs.79d8a5f2.svg HTTP/1.1
12:39:07 > Host: ftp-server
12:39:07 > Authorization: Basic ****
12:39:07 > User-Agent: curl/7.75.0
12:39:07 > Accept: */*
12:39:07 > Content-Type: image/svg+xml
12:39:07 > Content-Length: 77366
12:39:07 > Expect: 100-continue
12:39:07 > 
12:39:07 { [5 bytes data]
12:39:07 * Mark bundle as not supporting multiuse
12:39:07 < HTTP/1.1 100 Continue
12:39:07 } [5 bytes data]
12:39:07 * We are completely uploaded and fine
12:39:07 { [5 bytes data]
12:39:07 * Mark bundle as not supporting multiuse
12:39:07 < HTTP/1.1 201 Created
12:39:07 < Date: Thu, 27 May 2021 16:39:07 GMT
12:39:07 < Content-Type: application/****
12:39:07 < Transfer-Encoding: chunked
12:39:07 < Connection: keep-alive
12:39:07 < Server: Artifactory/6.23.13
12:39:07 < Location: ftp-server/storybook/file-loader/static/media/svg-defs.79d8a5f2.svg
12:39:07 < 
12:39:07 { [835 bytes data]
12:39:07 
100 78189    0   823  100 {
12:39:07   "repo" : "****",
12:39:07   "path" : "/storybook/file-loader/static/media/svg-defs.79d8a5f2.svg",
12:39:07   "created" : "2021-05-27T16:39:07.759Z",
12:39:07   "createdBy" : "****",
12:39:07   "downloadUri" : "ftp-server/storybook/file-loader/static/media/svg-defs.79d8a5f2.svg",
12:39:07   "mimeType" : "application/octet-stream",
12:39:07   "size" : "77366",
12:39:07   "checksums" : {
12:39:07     "sha1" : "aec79d93b48becce503b590336027b040d604214",
12:39:07     "md5" : "83db7ccd983bafa823176c1ab7444d66",
12:39:07     "sha256" : "5feb84ec671e6332e3e2441563afa737545946e0c8b89438bc92935a493294b2"
12:39:07   },
12:39:07   "originalChecksums" : {
12:39:07     "sha256" : "5feb84ec671e6332e3e2441563afa737545946e0c8b89438bc92935a493294b2"
12:39:07   }
12:39:07>放置ftp服务器/static/media/svg-defs.79d8a5f2.svg HTTP/1.1
12:39:07>主机:ftp服务器
12:39:07>授权:基本****
12:39:07>用户代理:curl/7.75.0
12:39:07>接受:*/*
12:39:07>内容类型:image/svg+xml
12:39:07>内容长度:77366
12:39:07>期望值:100继续
12:39:07 > 
12:39:07{[5字节数据]
12:39:07*将捆绑包标记为不支持多用途
12:39:07

将此标记为已解决,非常感谢您的帮助。这是我们的web服务器配置

编辑:

我们在artifactory中托管静态文件:

在artifactory中,有一个文件包含它支持的MIME类型列表:
$JFROG\u HOME/artifactory/var/etc/artifactory/mimetypes.xml

此文件可以编辑。结果表明,我们没有映射到
.svg
扩展名的MIME类型,因此我们的svg文件被默认为
应用程序/octet-stream
。修复方法只是编辑该xml文件以包含缺少的MIME类型


有关更多信息:

感谢您对我的教育。我认为它现在非常有意义。我们的服务器是artifactory,我刚刚阅读了以下内容:。似乎我们没有将类型映射到.svg扩展,因此它默认为application/octet stream。