【发布时间】:2014-07-15 00:06:13
【问题描述】:
我正在一个在服务器端使用 java + spring 以及 extdirectspring 的应用程序中工作。在客户端它使用 extjs/javascript。
我想在服务器端创建一个方法并从数据库中检索一个文件。如果文件不存在,那么我想以某种方式显示错误。
检索文件的尝试及其存在的检查需要在同一个调用中进行 - 可以在调用之间删除文件。
我可以看到人们在当前应用程序中使用的方式是使用 spring 控制器 + 请求映射和 window.open("someUrl/filename.blah");,服务器从映射方法返回文件。
这似乎无法让您处理文件不存在的情况。
理想情况下,我只想从具有文件数据(可能为空)和成功/失败的服务器发回一些 json。当我收到响应时,我可以显示有关失败的一些信息或打开文件。不幸的是,我无法观察到当前的故障模式,因为某处正在缓存文件 - 如果我从数据库中删除它们,那么它们似乎仍然存在,您仍然可以下载它们!
“打开”我的意思是显示标准的“你想用这个文件打开/保存做什么”对话框。我不想解析文件或对它做任何事情 - 我只是想将它提供给浏览器/用户。
有没有办法在不使用 url 和 window.open 的情况下做到这一点?例如,某些方法需要一个数据块和一个文件名或类似的?
更新
data/json 的传输不是我要解决的问题。
当我使用 extdirect 时,我可能会这样做:
public class SomeClass
{
@ExtDirectMethod
public AFile getFile(Long id) throws Exception
{
//do stuff
}
}
然后在客户端你就这样做:
someClass.getFile(id, function(file){
if(file.found){
SomeHowGiveThisToTheUser(file.name,file.data); ????
return;
}
ReportCouldntFind(file.name);
});
我不知道该怎么做是将文件提供给用户。
进一步更新
我认为没有 blob url 或数据 uri 就不可能做到这一点。这两个都在this post 中提到。我还没有尝试过,因为我们必须支持对于这两种技术来说太旧的浏览器。
【问题讨论】:
-
如果您使用 Google 了解如何在不加载页面的情况下从服务器获取数据,我相信您会找到解决方案,但您需要的是发出 XHR 请求。对该词进行搜索,您会找到足够多的信息。
-
另一个要搜索的术语是 AJAX,它只是上面的替代名称。我看到你在客户端上使用 ExtJS,我很确定他们有一个 API 可以帮助解决这个问题。
-
@cookiemonster 我可能说得不够清楚 - 问题不是从服务器检索数据,而是让浏览器保存/打开文件,如果它没有直接从 url 检索
-
@cookiemonster 我现在更新了我的问题
标签: javascript extjs