在javascript中如何从服务器打开文件
In javascript how do you open a file from the server?
我在一个应用程序中工作,在服务器端使用java + spring以及extdirectspring。客户端使用extjs/javascript。
我想在服务器端戳一个方法并从数据库中检索一个文件。如果文件不存在,那么我想以某种方式显示一个错误。
检索文件的尝试和检查文件是否存在需要在同一个调用中进行——文件可以在调用之间被删除。
我可以看到人们在当前应用程序中使用spring控制器+请求映射和服务器从映射方法返回文件的window.open("someUrl/filename.blah");
。
这似乎不能让你处理文件不存在的情况。
理想情况下,我只是想发送一些json从服务器返回有文件数据(可能为空)和成功/失败。当我得到响应时,我可以显示一些关于失败的信息或打开文件。不幸的是,我无法观察到当前的失败模式,因为某些地方正在缓存文件-如果我从数据库中删除它们,那么它们似乎仍然存在,您仍然可以下载它们!
这里的"打开"是指显示标准的"你想对这个文件做什么?打开/保存"对话框。我不想解析文件或对它做任何事情——我只想把它提供给浏览器/用户。
有没有办法做到这一点,而不使用url和窗口打开?例如一些方法,需要一个blob的数据和一个文件名或类似的?
数据/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或data uri是不可能做到这一点的。这两个都在这篇文章中提到。我还没有尝试过,因为我们必须支持一个太老的浏览器,对于这两种技术。
您想要做一些标准的Ajax(假设您有可用的jQuery)。
例如:
$.getJSON( url, function( data ) {
if (data.success){
} else {
}
});
在服务器端,添加代码以返回期望的JSON。
在extJS:Ext.Ajax.request({
url : url,
method: 'GET',
headers: { 'Content-Type': 'application/json' },
params : params,
success: function (response) {
var jsonResp = Ext.util.JSON.decode(response.responseText);
if (response.success){
// do success stuff, like using response.fileData
} else {
// do fail stuff
}
failure: function (response) {
var jsonResp = Ext.util.JSON.decode(response.responseText);
// etc.
});
在Java servlet的服务器上,您可以这样做(假设apache commons文件util):
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
InputStream in = new URL( "http://remote.file.url" ).openStream();
IOUtils.copy(in, response.getOutputStream());
}
可能是一种更具体的方法,但这给了你一个想法。
对于您的示例,您希望将文件内容包装在包含success
属性的JSON对象中。为此,使用Java JSON jar: http://json.org/java/
Update:终于明白你在问什么了
我终于想到你是在问如何处理实际的下载。
现在有很多方法。
看看这个答案,这是使用iFrame:下载文件使用Javascript/jQuery
还有一些奇特的下载组件,包括一些jQuery组件。
所以你会做一个两部分的过程:检查文件可用性使用标准ajax调用,然后如果response.success
,使用下载器为用户提供文件。
- Meteor发布/订阅无法从服务器文件夹中运行
- 说明Node.js项目:是否只有一个"服务器文件“;在node.js中
- Jquery AJAX发布变量到服务器文件
- 是否可以在不使用任何 severside 脚本语言的情况下将图像上传到服务器文件夹
- 不断从服务器文件更新 HTML 元素
- 使用 XHR 更新服务器文件并将选项添加到 html 选择
- 如何从 URL 中的节点.js服务器文件夹获取图像
- 使用 ArcGIS JavaScript API 访问服务器文件
- 从服务器文件系统将XML转换为HTML文本区域
- 多个Node.js应用程序;在一个服务器文件的坏做法
- 如何将base64映像存储到数据库和我的服务器文件夹中
- 如何在客户端浏览器中读取服务器文件
- 如何使用PHP从服务器文件夹中检索文件,并使用javascript在网页上显示/下载它
- Base64编码图像主机url或服务器文件路径
- Javascript:跨浏览器的无服务器文件上传和下载
- 通过javascript代码修改服务器文件
- 将结果写入服务器文件
- Netbeans中的服务器文件
- 您可以在没有回调的情况下从模块文件中调用主node.js服务器文件中的函数吗
- 一个node.js服务器文件可以同时用于HTML页面和处理来自该页面的POST请求吗