Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何进行本地文件下载_Javascript_Jquery_Rest - Fatal编程技术网

Javascript 如何进行本地文件下载

Javascript 如何进行本地文件下载,javascript,jquery,rest,Javascript,Jquery,Rest,我希望用户下载一个本地文件(在服务器上)。用户首先按下一个按钮开始创建文件,一旦文件准备好,他应该能够通过链接或按钮来下载文件 创建文件并不是一个问题,因为我只是向后端发送了一个AJAX调用,如下所示 @POST @Path("/createFile") @Produces("application/text") @Consumes("application/json") public String createFile(String argsFromPage) { /*File cre

我希望用户下载一个本地文件(在服务器上)。用户首先按下一个按钮开始创建文件,一旦文件准备好,他应该能够通过链接或按钮来下载文件

创建文件并不是一个问题,因为我只是向后端发送了一个AJAX调用,如下所示

@POST
@Path("/createFile")
@Produces("application/text")
@Consumes("application/json")
public String createFile(String argsFromPage) {
    /*File creation code here*/
    return "Path of file created";  
}
现在,该文件已创建,我只想创建一个链接,用户可以单击并下载该文件。目前,该文件可以是二进制文件或CSV文件。我做了几次尝试,但都没有成功

创建
函数创建_文件(){
$.ajax({
方法:“张贴”,
url:“.path/to/backend/service”,
contentType:“应用程序/json”,
数据:JSON.stringify({
参数1:val1
})
}).完成(功能(数据){
控制台日志(数据);
});
}
现在,一旦创建了文件,是否可以创建下载链接?更好的是,是否可以在创建文件后立即调用下载?这应该在浏览器中完成,还是在后端完成

跟进


下载文件后,如何从服务器上删除它?有没有办法忍受文件下载已经完成?

要创建指向文件的链接,您只需在
done()
处理程序中的DOM中创建
a
元素即可。试试这个:

function create_file() {
  $.ajax({
    method: "POST",
    url: ".path/to/backend/service",
    contentType: "application/json",
    data: { param1: val1 } // I assume 'val1' is declared in a higher scope?
  }).done(function(path) {
    $('#someContainer').append('<a href="' + path.trim() + '">Click here to download</a>');
  });
}
函数创建_文件(){
$.ajax({
方法:“张贴”,
url:“.path/to/backend/service”,
contentType:“应用程序/json”,
数据:{param1:val1}//我假设'val1'是在更高的范围内声明的?
}).done(函数(路径){
$(“#someContainer”).append(“”);
});
}

请注意,我删除了手册
JSON.stringify
调用,因为jQuery将为您执行此操作。还请注意,最好从AJAX请求返回JSON,因为它避免了空格问题,尽管考虑到您提供的代码示例,上面的内容仍然可以使用。

仅供参考,服务器上的文件将是远程文件。您试图复制的内容没有任何“本地”内容,可能存在一些重叠,但在我的情况下,文件创建是动态的,只有在创建文件后才会触发下载。我看过你提到的那篇文章,但它并没有解决我的问题。此外,路径似乎有一些问题,我似乎无法解决。对此,我深表感谢!我可以看到正在创建下载链接。然而,当我点击它时,我得到了错误404:java.io.FileNotFoundException:SRVE0190E:File notfound:/path/to/File。但是,我可以在
/path/to/file
处看到该文件。如何确保浏览器找到它?在我的浏览器中,我还可以看到
http://localhost:9080/Service_Name/path/to/file
。这似乎有点奇怪,因为文件在服务器上。为什么浏览器在客户端上查找文件?我说得对吗?我真的帮不了你,因为这是一个路径问题,而且还涉及到你如何设置你的服务器,但听起来你在返回一个相对路径,但需要使用绝对路径。谢谢,我会尽力弄明白的。最后,有没有什么方法可以在用户完成下载后删除该文件?没有具体说明。您所能做的就是在X分钟/小时后删除该文件。您可以跟踪文件在达到限制后被下载和删除的次数,但这比您当前的代码库要复杂得多。这意味着您试图在本地计算机上下载一个不允许的文件。您需要将下载指向服务器。