在我的 Apache 服务器上,我存储了几个 docx、xlsx pptx 文件。
一些客户端浏览器认为这些是常规的 zip 文件并在下载时更改文件扩展名。我如何让它不再那样做。
(使用 Ubuntu 服务器)
正如在别处看到的,docx、xlsx 和 pttx 是 ZIP。将它们上传到我的 Web 应用程序时,file(通过libmagic和python-magic)将它们检测为 ZIP。
我将文件的内容作为 blob 存储在数据库中,但自然我不想让用户相信这是什么类型的文件。所以我想file在下载过程中信任并自动生成一个文件名。
我知道可以修改,/etc/magic但格式 ( magic(5)) 对我来说太复杂了。我在 Debian bugs 上找到了一个关于这个问题的错误报告,但由于它是 2008 年的,它似乎不会很快得到修复。
我想我唯一的其他选择是确实信任用户(但仍将内容存储为 blob)并仅根据文件名检查文件扩展名。这样我就可以禁止某些扩展并允许其他扩展。当用户重新下载他的文件时,他可以以任何方式上传它。但是,如果文件与他人共享,则此解决方案是不安全的,因为您可以简单地重命名文件以允许上传。
有任何想法吗?
最后,我找到了 docx 等的幻数列表,但我无法将它们转换为magic(5)格式。
我们拥有的两种不同的第三方电子邮件产品对电子邮件的 MIME 源中存在content-id标头的反应不同。这导致了我们正在尝试解决的不一致的用户体验。
下面是一个例子:
--boundary-example
Content-Location: CID:somethingatelse
Content-ID: <foo4atfoo1atbar.net>
Content-Type: IMAGE/GIF
Content-Transfer-Encoding: BASE64
R0lGODlhGAGgAPEAAP/////ZRaCgoAAAACH+PUNv
cHlyaWdodCAoQykgMTk5LiBVbmF1dGhvcml6ZWQgZHV
wbGljYXRpb24gcHJvaGliaXRlZC4A etc..
Run Code Online (Sandbox Code Playgroud)
一种电子邮件产品将此解释为嵌入的图像。另一个将其解释为普通附件(未嵌入)。如果我们完全删除Content-ID行,两个产品都认为附件未嵌入。
是否有特定的 RFC 可以明确得出哪种行为是正确的结论?我和一位同事回顾了 RFC2392,它在开篇摘要中说:
在电子邮件中使用 [MIME] 来传送网页及其
相关图像需要一个 URL 方案,以允许 HTML 引用
消息中包含的图像或其他数据。Content-ID
统一资源定位符“cid:”用于此目的。[…]“cid”方案是指消息的特定正文部分;它的使用通常仅限于引用与引用正文部分相同的消息中的其他正文部分。“mid”方案还可以通过包含内容ID的地址来指代指定消息内的特定正文部分。
所以,虽然不是绝对的,我们倾向于认为,既然所有的嵌入式项目需要的CID引用他们,并且它是“一般仅限于相同的消息在身体其他部位,”和附件并不需要一个CID ,电子邮件产品将 cid 的存在视为“意图嵌入”的指标是合理的行为。
我可以得到确认吗?
网页由 apache2、CentOS 6.2 托管。
它获取 HTML、CSS、JS 文件到客户端。但是 CSS 和 JS 不呈现,会发生什么?因为他们应该在客户端运行 100%...
有没有办法在 IIS 7 中提供未知的文件类型?
我只想对一个关闭执行的目录执行此操作,并且所有内容都将作为静态文件提供。
就像现在一样,我必须添加我想要用作 MIME 类型的每个文件扩展名。我想为一切服务。如何才能做到这一点?
Nginx 允许您将文件扩展名映射到 MIME 类型。正如文档所说,它甚至带有一个预先构建的 mime 类型列表(粘贴在问题的末尾)。
我一直相信这个列表,而且一切都很好,但现在我注意到缺少某些类型。
怎么样application/javascript和application/json?
它使用旧的 deprecated application/x-javascript,我想这是为了确保 IE 支持......但它真的可以吗?
另外,应该压缩哪些类型?
我一直在以下代码段中使用该列表,尽管我承认它只是示例 nginx conf 文件的一部分,几年前我刚开始使用 nginx 时曾将其用作示例。
我还应该包括application/json吗?
http {
include mime.types;
default_type application/octet-stream;
gzip_types text/plain text/xml text/css
text/comma-separated-values
text/javascript application/x-javascript
application/atom+xml;
# text/html is included in the gzip list by default
# ...
}
Run Code Online (Sandbox Code Playgroud)
默认的 mime 类型为/etc/nginx/mime.types.
types {
text/html html htm shtml;
text/css css;
text/xml xml;
image/gif gif;
image/jpeg jpeg jpg;
application/x-javascript js;
application/atom+xml …Run Code Online (Sandbox Code Playgroud) 在我的 nginx 0.8.34 设置中,我使用 X-Accel-Redirect 功能来控制应用程序代码中的文件下载,同时不让应用程序自行处理下载。
在经历了很多痛苦之后,现在基本上可以工作了,除了 nginx 总是返回带有text/html内容类型的文件。
默认内容类型是 application/octet-stream,在http块中指定。
server 块包含文件存储目录的定义,其中包括:
location /files {
default_type application/octet-stream;
alias /srv/www/uploads;
internal;
}
Run Code Online (Sandbox Code Playgroud)
所以我甚至在这里指定了内容类型,但没有任何改变。
我不想通过应用程序设置 Content-Type 因为那样我会减慢我的速度(我首先必须确定它)。所以理想情况下,nginx 会根据文件扩展名返回正确的 mimetype(我确实在http块中包含了 mime.types )。
我正在维护一个 SVN 服务器,并且用户需要提交许多 adobe illustrator 文件(即*.ai)。我可以在他们的配置中使用自动道具将其设置为二进制文件,这样它就不会出现在邮件列表提交中。但是我想让这尽可能简单。有什么我可以在 SVN 服务器配置中设置的东西,以便它(即服务器)会自动设置正确的svn:mime-type?
我有一些由其他人在别处创建的旧 HTML 文件。由于某种原因,其中许多没有 .html 扩展名。如果可能,我不想更改它们,但出于某种原因,Apache 似乎无法执行任何 MIME 魔术来确定它们的文件类型。我启用了mime_magic mod,以及站点部分中的以下内容:
MimeMagicFile /etc/magic
Run Code Online (Sandbox Code Playgroud)
我应该注意到我在这台机器上使用 Debian Linux。
如果人们的计算机可以根据文件的扩展名(.pdf、.mp3、.docx、.dotx 等)决定如何处理文件,为什么 Web 服务器和电子邮件应用程序还需要指定 MIME 类型?
如果您想以不同于默认的方式传送文件(例如将 .py 或 .html 文件显示为纯文本),或者如果文件扩展名未在客户端计算机上注册,我认为这很有用,但在大多数情况下在某些情况下,如果我正在创建一种新的文件格式(例如 .foobaz)并希望人们能够在网络上和通过电子邮件共享这些文件,依靠客户端识别文件扩展名是否就足够了?