我已经在AppEngine数据存储之上实现了基本的文件上传/下载。
我想要的功能是名为“base.c”的文件将作为文本文件打开。 所以我做了以下内容:
(当然我的代码是一般情况下,但是这个具体的例子说明了这个问题)如何在用户使用“另存为”时选择文件名?
resp.setContentType("text/plain");
resp.setHeader("Content-Disposition", "inline; filename=base.c");
这将打开它在浏览器中的文本文件,这是我需要的。
但我也希望当用户使用浏览器的“保存页面作为..”选项时,它将提供“base.c”的初始名称。 它在firefox(6)中的确如此,但它在chrome(15)和safari(5)上给出了默认名称“download”。
更糟 - 当选择base.c作为文件名chrome警告用户这是错误的扩展名并要求确认才能继续。
现在,如果我使用“附件”而不是“内联”,它不会打开文件,而是使用右边的名称下载它。
我能做些什么来使默认保存为.. name是“base.c”?
这是浏览器的错误还是我滥用HTTP头?
(如果是任何帮助,所有的测试都是在OSX 10.6与下载网站是何许:
http://------.appspot.com/download?name=base.c)
文件系统上没有实际的静态文件。它由servlet从数据存储中输出。 – Danish94
对不起,我不熟悉GAE。您是否尝试过在web.xml配置中使用url-pattern?我编辑了我的答案 – scott
@丹尼斯:这一定是有效的。你只需要通过'request.getPathInfo()。substring(1)'而不是'request.getParameter(“name”)'来获取文件名。另请参阅http://balusc.blogspot.com/2007/07/fileservlet.html。 – BalusC