我正在尝试编写一个将为上传文件提供服务的Web应用程序,并让上传者指定内容类型。为此,我需要能够在提供文件时控制内容类型。对于我所知道的大多数网络服务器(例如Apache),我在这方面做得最好的是设置一个合适的后缀,并希望没有人上传一个“不支持”内容类型的文件。我想要做的是在我的代码中设置处理请求的内容类型 - 例如有一个描述该文件的数据库记录并从那里拉出来。但是,似乎我需要从我的应用程序中提供整个文件,就像它是动态的一样,并且会付出严重的性能损失(除此之外,还会失去直接从像Amazon S3这样的CDN提供服务的能力)。 / p>
所以问题是 -
我有没有办法告诉网络浏览器“从该网址获取文件,但使用重定向响应中提供的内容类型”?
是否有一个不太理想的解决方案,这仍然允许我在为内容类型使用动态应用程序时为文件使用静态内容服务器?
谢谢, 晒。
答案 0 :(得分:1)
是。您可以编写一个Apache模块(使用您选择的语言,包括C,Perl,Python等),通过将内容类型标头替换为从数据存储中提取的标头来过滤请求。例如,使用mod_python,您可以创建一个完全按照您描述的方式执行的PythonTypeHandler,但让Apache完成提供静态内容的繁重工作。
答案 1 :(得分:0)
您可能还想查看mod_mime_magic以解决此问题。它将查看文件以确定它是什么类型。
http://httpd.apache.org/docs/2.2/mod/mod_mime_magic.html
此外,在上传方面,您可以使用适用于您首选语言的任何魔术模块来检查文件扩展名是否与实际文件类型匹配。
答案 2 :(得分:0)
很长一段时间后找到答案:Apache有一个mod,mod_xsendfile。