svg - svg 文件作为“application/octet-stream”而不是“image/svg+xml”上传
问题描述
我正在使用 Storybook 创建一些故事并将它们发布到我们的服务器上。
我们目前使用命令build-storybook构建静态文件。当使用命令start-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 类型。image/svg+xml
问题发生在文件传输期间,它以某种方式将MIME 类型从application/octet-stream
.
我确保我们使用的是正确版本的 curl 即。版本 7.75,所以应该识别svg 内容类型。我也尝试通过标题设置内容类型,即-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 }
任何帮助表示赞赏
解决方案
将此标记为已解决。这是我们这边的网络服务器配置。
编辑:
我们在 artifactory 中托管静态文件:https ://jfrog.com/artifactory/
在 artifactory 中,有一个文件,其中包含它支持的 MIME 类型列表:$JFROG_HOME/artifactory/var/etc/artifactory/mimetypes.xml
.
这个文件是可以编辑的。事实证明,我们没有映射到.svg
扩展名的 MIME 类型,因此我们的 svg 文件默认为application/octet-stream
. 修复只是编辑该 xml 文件以包含缺少的 mime 类型。
推荐阅读
- snmp - 无法访问“http://mibs.snmplabs.com/asn1/”,任何编译专有 mib 的替代方法
- java - 如何使用 POI 读取 xlsx 文件?
- html - srcset hiDPI 图像的 Pagespeed 洞察惩罚
- javascript - 在反应中向父组件添加单选按钮值
- r - Smooth change of day length
- angularjs - 在 Angular 8 应用程序中使用 Angular JS 组件时无法解决“角度”错误
- tensorflow - 这个警告信息是什么意思,tensorflow:Efficient allreduce is not supported for 4 IndexedSlices?
- node.js - 在客户端和服务器在不同端口 reactJS 和 nodeJS 上运行的系统中使用 Google 身份验证处理登录
- ruby-on-rails - 在 Ruby 中解析哈希
- java - 如何在除 WEB-INF 文件夹之外的 Spring MVC 应用程序中设置欢迎页面?