通过jQuery.Ajax下载文件

我在服务器端有一个Struts2操作,用于文件下载。

<action name="download" class="com.xxx.DownAction">

<result name="success" type="stream">

<param name="contentType">text/plain</param>

<param name="inputName">imageStream</param>

<param name="contentDisposition">attachment;filename={fileName}</param>

<param name="bufferSize">1024</param>

</result>

</action>

但是,当我使用jQuery调用操作时:

$.post(

"/download.action",{

para1:value1,

para2:value2

....

},function(data){

console.info(data);

}

);

在Firebug中,我看到数据是通过 检索的。我想知道如何打开 ,用户可以用它在本地保存文件吗?

回答:

这是我现在建议的一些注意事项:

  • 需要相对较新的浏览器
  • 如果预期文件 您可能应该执行与原始方法(iframe和cookie)类似的操作,因为以下某些操作可能会消耗系统内存,至少与正在下载的文件和/或其他有趣的CPU一样大。副作用。

    fetch('https://jsonplaceholder.typicode.com/todos/1’)

    .then(resp => resp.blob())

    .then(blob => {

    const url = window.URL.createObjectURL(blob);

    const a = document.createElement('a');

    a.style.display = 'none';

    a.href = url;

    // the filename you want

    a.download = 'todo-1.json';

    document.body.appendChild(a);

    a.click();

    window.URL.revokeObjectURL(url);

    alert('your file has downloaded!'); // or you know, something with better UX...

    })

    .catch(() => alert(‘oh no!’));

Bluish完全正确,您不能通过Ajax来实现,因为JavaScript无法将文件直接保存到用户的计算机(出于安全考虑)。不幸的是,将

主窗口的 URL 指向文件下载意味着您​​几乎无法控制文件下载发生时的用户体验。

我创建了jQuery File Download,它允许通过OnSuccess和OnFailure回调完成文件下载,从而获得“类似于Ajax”的体验,从而提供更好的用户体验。看看我的博客文章,了解该插件解决的常见问题以及使用该插件的一些方法,以及实际使用的jQuery文件下载演示。

这是一个使用带有Promise的插件源的简单用例演示。

$.fileDownload('some/file.pdf')

.done(function () { alert('File download a success!'); })

.fail(function () { alert('File download failed!'); });

以上是 通过jQuery.Ajax下载文件 的全部内容, 来源链接: utcz.com/qa/433285.html

回到顶部