相关疑难解决方法(0)

处理从ajax帖子下载的文件

我有一个javascript应用程序,它将ajax POST请求发送到某个URL.响应可能是JSON字符串,也可能是文件(作为附件).我可以在我的ajax调用中轻松检测Content-Type和Content-Disposition,但是一旦我检测到响应包含文件,我该如何让客户端下载它?我在这里读过很多类似的帖子,但没有一个提供我正在寻找的答案.

请,请不要发布答案,建议我不应该使用ajax或者我应该重定向浏览器,因为这都不是一个选项.使用纯HTML表单也不是一种选择.我需要的是向客户端显示下载对话框.可以这样做,怎么做?

编辑:

显然,这不可能做到,但有一个简单的解决方法,如接受的答案所示.对于今后遇到这个问题的人来说,我的解决方法如下:

__PRE__

所以基本上,只需生成一个HTML表单,其中包含与AJAX请求中使用的相同的参数并提交它.

javascript ajax jquery

373
推荐指数
10
解决办法
41万
查看次数

使用Javascript/jQuery下载文件

在这里指定了非常相似的要求.

我需要让用户的浏览器手动开始下载 $('a#someID').click();

但我无法使用该window.href方法,因为它将当前页面内容替换为您尝试下载的文件.

相反,我想在新窗口/选项卡中打开下载.这怎么可能?

javascript jquery download

325
推荐指数
15
解决办法
103万
查看次数

使用jQuery下载文件

如何在用户单击链接时提示下载.

例如,而不是:

<a href="uploads/file.doc">Download Here</a>
Run Code Online (Sandbox Code Playgroud)

我可以用:

<a href="#">Download Here</a>

 $('a').click... //Some jquery to download the file
Run Code Online (Sandbox Code Playgroud)

这样,Google就不会将我的HREF和私人文件编入索引.

这可以用jQuery完成,如果是这样,怎么样?或者应该用PHP或其他东西来完成?

jquery file download

108
推荐指数
7
解决办法
42万
查看次数

下载数据url文件

我正在玩一个完全基于javascript的zip/unzip实用程序的想法,任何人都可以从浏览器访问.他们可以直接将他们的zip拖到浏览器中,然后让他们下载所有文件.他们还可以通过拖动单个文件来创建新的zip文件.

我知道在服务器端做它会更好,但这个项目只是为了一点乐趣.

如果我利用各种可用方法,将文件拖入浏览器应该很容易.(gmail风格)

编码/解码应该没问题.我见过一些as3 zip库,所以我相信我应该没问题.

我的问题是最后下载文件..

window.location = 'data:jpg/image;base64,/9j/4AAQSkZJR....' 
Run Code Online (Sandbox Code Playgroud)

这在firefox中运行良好,但在chrome中不行.

我可以将文件嵌入到chrome中使用的图像<img src="data:jpg/image;ba.." />,但文件不一定是图像.它们可以是任何格式.

任何人都可以想到另一种解决方案或某种解决方法吗?

javascript data-url

106
推荐指数
9
解决办法
30万
查看次数

Spring - 将响应下载为文件

我正在使用AngularJS和Spring编写应用程序.我想向服务器发送请求并下载从控制器返回的响应作为文件.在控制器中,我有csv文件的内容(作为字符串),即1;2;3;4(1行,4列).将此响应作为文件下载的最简单方法是什么?

下面,我发布了我的简化代码.在Spring控制器中:

@RequestMapping(value = "/csv", method = GET)
@ResponseBody
public String getCsvFile() {
    return getCsvContent();
}
Run Code Online (Sandbox Code Playgroud)

在javascript(AngularJS)

return $http({method: 'GET', url: 'csv/'});
Run Code Online (Sandbox Code Playgroud)

我也试图写入响应流(下面),设置标题,但在客户端我总是把这个内容作为字符串 - 而不是作为要下载的文件.

@RequestMapping(value = "/csv", method = GET)
@ResponseBody
public void getCsvFile(HttpServletResponse response) {
    response.setContentType("application/csv");
    response.setHeader("Content-Disposition", "attachment; filename=file.csv");
    response.setContentLength(getCsvContent().getBytes().length);
    ServletOutputStream out = response.getOutputStream();
    out.write(getCsvContent());
    out.flush();
    out.close();
}
Run Code Online (Sandbox Code Playgroud)

有没有人知道如何正确编写控制器的方法,以便在客户端下载响应作为文件?

spring angularjs

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

是否可以使用HTTP POST下载文件?

是否可以使用HTTP POST下载文件?我知道"获取"方式(windows.location),但在我的情况下,有很多param应该传递给服务器

javascript java ajax http

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

下载外部资源 - 重命名文件

我有一个网站,提示用户从外部资源下载文件.由于外部文件名被散列并且用户下载了多个文件,因此用户很难知道他们下载的文件到达了他们请求的资源.例如,文件名fdae442dafe42.zip可以是production-resources.zip.

我正在寻找方法,以便浏览器将文件作为一个不同的名称下载.以下是我的一些想法以及为什么它们不起作用,但您可以找到解决方法.

请注意,我对外部资源没有任何控制权.我将无法更改标题或其他任何内容.我的服务是一个主要针对桌面用户的网站.Android和iOS解决方案不会那么有用.

下载属性

这种方法在谷歌Chrome和Firefox中运行了一段时间,但随后他们开始遵循W3 HTML5规范.外部资源需要发送Content-Disposition之前谷歌浏览器和Firefox未检查过的标题.

PHP代理下载

我知道我可以让PHP脚本向外部资源发出请求,然后在更改标题和名称以满足我的需求时将其提供给最终用户.问题是网站流量很大,每个用户下载大约1-2GB的数据.我的服务器无法处理这种类型的流量,升级服务器的成本可能太高.

使用外部应用程序重命名文件

我正在考虑使用外部应用程序(可能是Chrome/Firefox扩展程序),它们会在完成下载后重命名这些文件.但考虑到我的观众数量足够大,一次访问者,要求他们下载应用程序或扩展程序是不太可能的.

Flash或Java嵌入式解决方案

我正在考虑使用Java或Flash嵌入式文件来处理文件下载,但我对这两个平台都不太了解.据我所知,Flash对用户的文件系统没有太多控制权,因此这可能是一个问题.Java将能够完成这项任务,但我真的希望我不必使用Java,因为它通常不安全,需要大量下载才能安装它(与外部软件的想法相同).


如果您对我可能采取的措施有什么想法来解决这个问题,我们将不胜感激.我不是在寻找任何代码,只是关于如何完成上述任务的想法.我想感谢你们所有的时间和专业知识.

javascript php html5

11
推荐指数
1
解决办法
4049
查看次数

通过iframe下载文件时出现Chrome错误

我正在向服务器提交JSON数据.服务器生成PDF文件并使用该PDF文件的URL进行响应.然后我再向服务器发出下载PDF文件的请求.要进行下载,我创建一个隐藏的iframe并将源设置为PDF网址.请注意,我希望用户的浏览器保持在同一页面并在后台下载.关于我正在做什么以及我采用的解决方案的更多细节可以在这个SO问题中找到.

每当我在Chrome中使用这种技术时,一切正常.但是看一下chrome开发者控制台,我看到了错误信息Failed to load resource.有没有办法以不同的方式做到这一点,以便我不会得到这些错误?

在jsfiddle上可以看到一个非常简单且有效的问题.只需单击"下载PDF"按钮,然后查看Chrome控制台即可.

该页面上的代码如下所示:

$(document).ready( function() {
    var downloadFile = function(url){
        var iframe = $("iframe#download");
        if (!iframe.length) {
            iframe = $("<iframe id='download' style='display:none;'/>");
            $("body").append(iframe);
        }
        iframe.attr("src", url);
    };

    $("button").click(function() {    
        downloadFile("http://www.education.gov.yk.ca/pdf/pdf-test.pdf");
    });
});
Run Code Online (Sandbox Code Playgroud)

javascript iframe jquery

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

提供从jQuery帖子下载的生成文件

我有一个大表单,允许用户输入许多不同的字段,当它们完成后,我需要将表单的内容发送到服务器,处理它,然后吐出一个包含该文件的.txt文件.他们下载的处理结果.现在,除了下载部分,我都已经完成了设置.在对jQuery .post()的响应上设置标题似乎不起作用.有没有其他方法比做某种iframe技巧使这项工作(一个JavaScript/jQuery下载文件通过POST与JSON数据)?

我再次将数据发送到服务器,处理它,然后想用标题回显结果以提示下载对话框.我不想将结果写入磁盘,提供下载,然后从服务器中删除该文件.

php jquery post

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

文件不是下载,而是在浏览器中打开

我的 Pdf 文件存储在 google 存储桶中,我有一个链接,比如https://storage.googleapis.com/bucketName/xyz.pdf。要下载这个文件,我正在这样做,

<a href="https://storage.googleapis.com/bucketName/xyz.pdf" download> Download This File </a>
Run Code Online (Sandbox Code Playgroud)

但是当我点击这个锚标签时,浏览器没有下载这个文件,而是在同一个选项卡中打开这个文件,即使我尝试通过 javascript 下载文件并使用这个代码。

var link = document.createElement("a");
link.download = 'File.pdf';
link.href = 'https://storage.googleapis.com/bucketName/xyz.pdf';
link.click();
Run Code Online (Sandbox Code Playgroud)

但同样的情况再次发生在同一个选项卡中打开文件而不是下载。我不知道主要问题是什么?这个 Google 存储桶是不允许文件下载,还是我的 chrome 设置阻止文件下载。它不是在 Chrome 中下载,我猜 Chrome 确实允许从 CORS 文件下载。

html javascript anchor download

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

将文件写入HttpResponse,浏览器不提示保存

我有一个带有IHttpHandler的ashx文件.当我将一些数据发布到此IHttpHandler时,我会做一些工作,创建一个文件,然后将该文件返回给用户,以便他们可以通过浏览器保存文件.

创建文件后,我将尝试将文件写回响应:

HttpResponse response = context.Response;
response.ClearContent();
response.Clear();
response.ContentType = "application/octet-stream";
response.AddHeader("Content-Disposition", "attachment; filename=MYFILE.EXT");
response.WriteFile("C:\tempstuff\MYFILE.EXT");
Run Code Online (Sandbox Code Playgroud)

在稍后的块中,我将打电话给:

response.End()
Run Code Online (Sandbox Code Playgroud)

当我打电话给这个Handler时,没有任何反应.返回响应200,不抛出任何错误 - 但浏览器不会提示用户保存此文件.

以下是Fiddler捕获的响应:

HTTP/1.1 200 OK
Server: ASP.NET Development Server/10.0.0.0
Date: Thu, 23 Aug 2012 12:12:19 GMT
X-AspNet-Version: 4.0.30319
Content-Disposition: attachment; filename=MYFILE.EXT
Cache-Control: private
Content-Type: application/octet-stream
Content-Length: 781053
Connection: Close

[raw content of the file here]
Run Code Online (Sandbox Code Playgroud)

这个回答对我来说是正确的.它包含文件的内容 - 但是在任何主流浏览器下,没有文件对话框提示我保存文件.

我在这做错了什么?

更新:如果它有帮助,这里是我从我的Web应用程序使用JavaScript调用此HttpHandler的地方.

$.ajax({
    type: 'POST',
       url: ashxUrl,
       data: postData,
       success: function (result) {
           // Doin' stuff on success
       },
       error: function (error) …
Run Code Online (Sandbox Code Playgroud)

javascript c# asp.net ajax ashx

5
推荐指数
1
解决办法
3414
查看次数

ASP.NET Web API下载文本

我有一个WebAPI控制器,需要根据请求下载一些文件,但是当涉及到纯文本文件时,它不会给我浏览器的下载请求.它只给出了纯文本响应,就像它是JSON(在我的例子中,它是一个JSONP WebAPI).

我已经从堆栈(和其他网站)检查了其他问答,但我仍然一无所获:

这是我当前的代码:

var httpResponse = new HttpResponseMessage(HttpStatusCode.OK);
httpResponse.Content = new StreamContent(new MemoryStream(Encoding.UTF8.GetBytes(content)));
httpResponse.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
httpResponse.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
httpResponse.Content.Headers.ContentDisposition.FileName = "speedcam.txt";
return httpResponse;
Run Code Online (Sandbox Code Playgroud)

这是Chrome的回应:

缓存控制:无缓存

内容处置:附件; 文件名= speedcam.txt

内容长度:17462

内容类型:应用/八位字节流

日期:星期一,2012年8月27日04:53:23 GMT

到期日:-1

附注:无缓存

服务器:Microsoft-IIS/8.0

X-ASPNET-版本:4.0.30319

X-已启动方式:ASP.NET

X-SourceFiles:= UTF-8乙TTpcVHJhYmFsaG9cTWFwYVJhZGFyXE1hcGFSYWRhci5XZWJBUEk0XEV4cG9ydGE =????

似乎没问题,但整个文件文本都在Chrome开发工具"响应选项卡"中.

c# asp.net rest asp.net-web-api

5
推荐指数
1
解决办法
3953
查看次数

向服务器发出JSON POST请求,接收二进制响应(Excel文件),如何下载?

我正在尝试对发送JSON数据的服务器进行POST调用.服务器获取JSON数据,进行一些处理,然后发回Excel .xlsx作为响应.我希望浏览器打开"将文件另存为"对话框以供用户保存.我一直在寻找一个干净的解决方案来做到这一点.但是这个问题的一个可能的解决方案JavaScript/jQuery通过POST下载文件和JSON数据建议将Excel文件保存在服务器上,然后发回一个URL链接,然后打开一个iframe供用户下载.这对我来说是不行的,因为用户可以在服务器上创建数千个Excel文件,并且服务器具有有限的节省空间.我希望解决方案能够即时实现.我见过的另一个解决方案建议将数据转换为表单,然后使用表单提交.再次这是一个禁忌,因为我的数据在数百甚至数千个Excel行的范围内.

我的jQuery POST调用:

   $.ajax({
          type: 'POST',
          url: '/server/path',
            data: JSON.stringify(dataSent),
            processData: false,
            success: function(data, textStatus, jqXHR) {

            },
            error: function(result, status, err) {

            },
            contentType: 'application/json',
            dataType: 'application/vnd.ms-excel'
        }); 

在后端我设置了这个:

Response.header("Content-Type","application/vnd.ms-excel")

Response.header("Content-Disposition","attachment; filename = \"export.xlsx \"")

强制浏览器打开"将文件另存为..."对话框的最佳方法是什么?

谢谢,

javascript rest excel jquery json

5
推荐指数
1
解决办法
6604
查看次数

标签 统计

javascript ×9

jquery ×6

ajax ×3

download ×3

asp.net ×2

c# ×2

php ×2

rest ×2

anchor ×1

angularjs ×1

ashx ×1

asp.net-web-api ×1

data-url ×1

excel ×1

file ×1

html ×1

html5 ×1

http ×1

iframe ×1

java ×1

json ×1

post ×1

spring ×1