相关疑难解决方法(0)

通过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>
Run Code Online (Sandbox Code Playgroud)

但是当我使用jQuery调用动作时:

$.post(
  "/download.action",{
    para1:value1,
    para2:value2
    ....
  },function(data){
      console.info(data);
   }
);
Run Code Online (Sandbox Code Playgroud)

在Firebug中我看到使用二进制流检索数据.我想知道如何打开用户可以在本地保存文件的文件下载窗口

javascript ajax jquery jsp download

391
推荐指数
14
解决办法
68万
查看次数

JavaScript/jQuery通过POST使用JSON数据下载文件

我有一个基于jquery的单页webapp.它通过AJAX调用与RESTful Web服务进行通信.

我正在努力完成以下任务:

  1. 将包含JSON数据的POST提交到REST URL.
  2. 如果请求指定了JSON响应,则返回JSON.
  3. 如果请求指定了PDF/XLS/etc响应,则返回可下载的二进制文件.

我现在有1和2工作,客户端jquery应用程序通过基于JSON数据创建DOM元素来显示网页中返回的数据.从Web服务的角度来看,我也有#3工作,这意味着如果给出正确的JSON参数,它将创建并返回二进制文件.但我不确定在客户端javascript代码中处理#3的最佳方法.

是否有可能从这样的ajax调用中获取可下载的文件?如何让浏览器下载并保存文件?

$.ajax({
    type: "POST",
    url: "/services/test",
    contentType: "application/json",
    data: JSON.stringify({category: 42, sort: 3, type: "pdf"}),
    dataType: "json",
    success: function(json, status){
        if (status != "success") {
            log("Error loading data");
            return;
        }
        log("Data loaded!");
    },
    error: function(result, status, err) {
        log("Error loading data");
        return;
    }
});
Run Code Online (Sandbox Code Playgroud)

服务器响应以下标头:

Content-Disposition:attachment; filename=export-1282022272283.pdf
Content-Length:5120
Content-Type:application/pdf
Server:Jetty(6.1.11)
Run Code Online (Sandbox Code Playgroud)

另一个想法是生成PDF并将其存储在服务器上并返回包含该文件的URL的JSON.然后,在ajax成功处理程序中发出另一个调用,执行以下操作:

success: function(json,status) {
    window.location.href = json.url;
}
Run Code Online (Sandbox Code Playgroud)

但这样做意味着我需要对服务器进行多次调用,而我的服务器需要构建可下载的文件,将它们存储在某处,然后定期清理该存储区域.

必须有一种更简单的方法来实现这一目标.想法?


编辑:在查看$ .ajax的文档后,我看到响应dataType只能是其中之一xml, html, script, json, jsonp, text,所以我猜测没有办法使用ajax请求直接下载文件,除非我在使用中嵌入二进制文件@VinayC答案中建议的数据URI方案(这不是我想做的事情).

所以我想我的选择是:

  1. 不使用ajax而是提交表单帖子并将我的JSON数据嵌入到表单值中.可能需要搞乱隐藏的iframe等.

  2. 不使用ajax而是将我的JSON数据转换为查询字符串以构建标准GET请求并将window.location.href设置为此URL.可能需要在我的单击处理程序中使用event.preventDefault()以防止浏览器从应用程序URL更改. …

javascript ajax rest jquery

241
推荐指数
9
解决办法
34万
查看次数

使用Ajax下载并打开PDF文件

我有一个生成PDF的动作类.该contentType适当地设定.

public class MyAction extends ActionSupport 
{
   public String execute() {
    ...
    ...
    File report = signedPdfExporter.generateReport(xyzData, props);

    inputStream = new FileInputStream(report);
    contentDisposition = "attachment=\"" + report.getName() + "\"";
    contentType = "application/pdf";
    return SUCCESS;
   }
}
Run Code Online (Sandbox Code Playgroud)

action 通过Ajax调用来调用它.我不知道将此流传递给浏览器的方法.我尝试过一些东西,但没有任何效果.

$.ajax({
    type: "POST",
    url: url,
    data: wireIdList,
    cache: false,
    success: function(response)
    {
        alert('got response');
        window.open(response);
    },
    error: function (XMLHttpRequest, textStatus, errorThrown) 
    {
        alert('Error occurred while opening fax template' 
              + getAjaxErrorString(textStatus, errorThrown));
    }
});
Run Code Online (Sandbox Code Playgroud)

以上给出了错误:

您的浏览器发送了此服务器无法理解的请求.

javascript java pdf jquery

88
推荐指数
9
解决办法
28万
查看次数

使用ajax请求下载文件

我想点击按钮时发送"ajax下载请求",所以我试着这样做:

JavaScript的:

var xhr = new XMLHttpRequest();
xhr.open("GET", "download.php");
xhr.send();
Run Code Online (Sandbox Code Playgroud)

的download.php:

<?
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename= file.txt");
header("Content-Transfer-Encoding: binary");    
readfile("file.txt");
?>
Run Code Online (Sandbox Code Playgroud)

但是没有按预期工作,我该怎么办?先感谢您

javascript php ajax file download

87
推荐指数
5
解决办法
27万
查看次数

通过AJAX MVC下载Excel文件

我在MVC中有一个大(ish)形式.

我需要能够生成包含该表单子集中的数据的excel文件.

棘手的一点是,这不应该影响表单的其余部分,所以我想通过AJAX来做.我在SO上遇到了几个似乎有关的问题,但我无法弄清楚答案的意思.

这个似乎最接近我所追求的:asp-net-mvc-downloads-excel - 但我不确定我理解这个反应,现在已经有几年了.我还看到了另一篇关于使用iframe处理文件下载的文章(找不到了),但我不知道如何使用MVC.

我的excel文件返回正常,如果我正在做一个完整的帖子回来但我不能让它在mvc中使用AJAX.

c# vb.net asp.net-mvc jquery export-to-excel

86
推荐指数
6
解决办法
20万
查看次数

使用jQuery的ajax方法将图像检索为blob

我最近问了另一个(相关的)问题,这导致了这个后续问题: 提交数据而不是输入表单的文件

通过jQuery.ajax()文档(http://api.jquery.com/jQuery.ajax/)阅读,似乎接受的dataTypes列表不包含图像.

我正在尝试使用jQuery.get(或jQuery.ajax,如果必须)检索图像,将此图像存储在Blob中并将其上传到POST请求中的另一台服务器.目前,看起来由于数据类型不匹配,我的图像最终被破坏(大小以字节不匹配等).

执行此操作的代码如下(它在coffeescript中但不应该难以解析):

handler = (data,status) ->
  fd = new FormData
  fd.append("file", new Blob([data], { "type" : "image/png" }))
  jQuery.ajax {
    url: target_url,
    data: fd,
    processData: false,
    contentType: "multipart/form-data",
    type: "POST",
    complete: (xhr,status) ->
      console.log xhr.status
      console.log xhr.statusCode
      console.log xhr.responseText

  }
jQuery.get(image_source_url, null, handler)
Run Code Online (Sandbox Code Playgroud)

如何将此图像检索为blob?

javascript jquery

72
推荐指数
3
解决办法
9万
查看次数

为什么没有办法使用ajax请求下载文件?

在我们的应用程序中,我们需要实现以下场景

  1. 请求从客户端发送
  2. 服务器处理请求并生成文件
  3. 服务器返回文件作为响应
  4. 客户端浏览器显示文件下载弹出对话框,允许用户下载文件

我们的应用程序是基于ajax的应用程序,因此我们发送ajax请求(如使用jquery.ajax()函数)非常简单方便.

但是在googilng之后,事实证明只有在使用非ajax POST请求时才能进行文件下载(就像在这个流行的SO线程中所描述的那样).因此,我们需要实现更加丑陋且更复杂的解决方案,这需要form使用嵌套的隐藏字段构建HTML结构.

有人可以用简单的话来解释为什么ajax请求不能用于下载文件?这背后的机制是什么?

javascript ajax post download

46
推荐指数
1
解决办法
7万
查看次数

如何从content-disposition获取文件名

我下载文件作为ajax的响应.如何从内容处理中获取文件名和文件类型,并为其显示缩略图.我有很多搜索结果,但找不到正确的方法.

$(".download_btn").click(function () {
    var uiid = $(this).data("id2");

    $.ajax({
        url: "http://localhost:8080/prj/" + data + "/" + uiid + "/getfile",
        type: "GET",
        error: function (jqXHR, textStatus, errorThrown) {
            console.log(textStatus, errorThrown);
        },
        success: function (response, status, xhr) 
        {
            var header = xhr.getResponseHeader('Content-Disposition');
            console.log(header);     
        }
    });
Run Code Online (Sandbox Code Playgroud)

控制台输出:inline; filename=demo3.png

javascript ajax filenames file-type content-disposition

33
推荐指数
5
解决办法
4万
查看次数

如何在Liferay serveResource( - , - )方法中从AJAX请求下载文件

我有一个要求:我正在制作一个AJAX请求将一些数据传递给服务器.在我的服务器中,我正在使用该数据创建一个文件.

"现在问题是文件没有下载到客户端".

(我使用Apache POI API从给定数据创建excel文件).任何人都可以帮我这么做吗?

这是我的代码:

(制作AJAX请求的代码)

<script>
    function downloadUploadedBacklogs () {

        try {
            var table_data = [];

            var count = jQuery("#backlogTable tr:first td" ).length;
            jQuery("#<portlet:namespace/>noOfColumns").val(count);
            var index = 0;
            jQuery('tr').each(function(){

                var row_data = '';
                jQuery('td', this).each(function(){
                    row_data += jQuery(this).text() + '=';   
                });   
                table_data.push(row_data+";");

            });
            jQuery("#<portlet:namespace/>backlogDataForDownload").val(table_data);
            jQuery("#<portlet:namespace/>cmd").val("downloadUploadedBacklogs");
            alert('cmd: ' + jQuery("#<portlet:namespace/>cmd").val());  
            var formData = jQuery('#<portlet:namespace/>backlogImportForm').serialize();

            jQuery.ajax({
                url:'<%=resourceURL%>',
                data:formData,
                type: "post",
                success: function(data) {

                }
            });
            alert('form submitted');

        } catch(e) {
            alert('eroor: ' + e);
        }
    };
</script>
Run Code Online (Sandbox Code Playgroud)

Java代码serveResource( - , …

javascript java ajax jquery liferay

22
推荐指数
2
解决办法
4341
查看次数

JavaScript Max Blob大小是否有任何限制

我正在尝试使用AJAX调用下载文件.我需要使用AJAX调用,因为我必须发出一个帖子请求以及我需要从客户端发送一些标题.由于Server API不在我们的控制之下,除了使用AJAX之外,我们没有太多选择.为了显示文件保存对话框,我将字节数组转换为blob到Object URL,如下所示

var oReq = new XMLHttpRequest();
oReq.open("POST","api/operations/zip", true);
oReq.responseType = "arraybuffer";
oReq.onload = function(oEvent) { 
   var blob=new Blob([oReq.response], {type: 'application/octet-binary'}); 
   var link=document.createElement('a'); 
   link.href=window.URL.createObjectURL(blob); 
   link.download="myFileName.zip"; link.click();  
}
oReq.send(filePaths);
Run Code Online (Sandbox Code Playgroud)

现在我想知道除了浏览器内存限制之外,我们可以在JavaScript中使用Blob大小限制.如果我有大约8 GB RAM,可以下载4 GB文件.

javascript ajax blob download

18
推荐指数
2
解决办法
2万
查看次数