如何进行本地文件下载

时间:2017-04-24 15:08:52

标签: javascript jquery rest

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

创建文件不是问题,因为我只是向我的后端发送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文件。我做了几次尝试但没有成功

<button onclick='create_file()'>Create</button>
function create_file() {
    $.ajax({
        method : "POST",
        url : ".path/to/backend/service",
        contentType : "application/json",
        data : JSON.stringify({
            param1 : val1
        })
    }).done(function(data) {
        console.log(data);
    });
}

现在,一旦创建了文件,是否可以创建下载链接?更好的是,是否可以在创建文件后立即调用下载?这应该在浏览器或后端完成吗?

跟进

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

1 个答案:

答案 0 :(得分:1)

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

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>');
  });
}

请注意,我删除了手动JSON.stringify调用,因为jQuery会为您执行此操作。另请注意,最好从AJAX请求返回JSON,因为它避免了空白问题,尽管上面的代码示例仍然适用于您提供的代码示例。