javascript - 如何进行本地文件下载

标签 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);
    });
}

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

跟进

文件下载后,如何从服务器上删除它?有什么办法可以让文件下载完成吗?

最佳答案

要创建文件的链接,您只需在 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>');
  });
}

请注意,我删除了手动 JSON.stringify 调用,因为 jQuery 会为您执行此操作。另请注意,最好从 AJAX 请求返回 JSON,因为它可以避免空格问题,尽管根据您提供的代码示例,上述内容应该仍然有效。

关于javascript - 如何进行本地文件下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43591702/

相关文章:

jquery - 无法读取未定义的属性 'top'

rest - 在 Couchdb/Cloudant View 上使用基于 etag 的缓存?

rest - 无法使用个人访问 token (302 重定向)对 Azure DevOps 进行身份验证

javascript - 如何在 RegEx 模式中使用变量?

javascript - 从此访问原型(prototype)函数

javascript - 选中单选框时禁用输入框

c# - 使用jquery插件上传多张图片

javascript - 根据模型属性对 Backbone 集合进行排序

javascript - 在行中对按其他列 ID 分组的一些其他列行值求和

java - Jackson - 忽略具有特定名称的属性