|
|
1
58
我一直在玩另一个使用斑点的选项。我已经设法让它下载了文本文档,我还下载了PDF(尽管它们已经损坏)。 使用blob API,您将能够执行以下操作:
这是IE 10+,Chrome 8+,FF 4+。看见 https://developer.mozilla.org/en-US/docs/Web/API/URL.createObjectURL 它将只在Chrome、Firefox和Opera中下载该文件。这将使用锚标记上的下载属性强制浏览器下载。 |
|
|
2
9
问这个问题已经有一段时间了,但我也遇到了同样的挑战,我想分享我的解决方案。它使用了其他答案中的元素,但我无法完整地找到它。它不使用表单或iframe,但它确实需要post/get请求对。它不是在请求之间保存文件,而是保存post数据。它似乎既简单又有效。 客户
服务器
|
|
|
3
2
在很久以前的某个地方找到的,它工作得很好!
|
|
|
4
4
这不完全是对原始帖子的回答,而是一个快速而肮脏的解决方案,用于将json对象发布到服务器并动态生成下载。 客户端jQuery:
..然后在服务器端解码json字符串并设置下载头(PHP示例):
|
|
|
5
170
勒特朗耶
的解决方案只适用于非常简单的页面。
或者使用jQuery
这实际上是做什么的:执行一个post to/create_binary_文件。在变量postData中包含数据的php;如果该帖子成功完成,请在页面正文中添加一个新的iframe。假设响应来自/create_binary_文件。php将包含一个值“url”,这是生成的PDF/XLS/etc文件可以从中下载的url。假设web服务器具有适当的mime类型配置,向引用该URL的页面添加iframe将导致浏览器促使用户下载该文件。 |
|
|
6
11
有一种更简单的方法,创建一个表单并发布它,如果返回的mime类型是浏览器可以打开的,那么这就有重置页面的风险,但对于csv之类的,这是完美的 示例需要下划线和jquery
对于html、文本等内容,请确保mimetype是application/octet stream之类的内容 PHP代码
|
|
|
7
17
我知道这种说法,但我想我已经想出了一个更优雅的解决方案。我也有同样的问题。我所建议的解决方案存在的问题是,它们都要求将文件保存在服务器上,但我不想将文件保存在服务器上,因为这会带来其他问题(安全性:未经身份验证的用户可能会访问该文件,清理:如何以及何时清除这些文件)。和你一样,我的数据是复杂的、嵌套的JSON对象,很难形成表单。 我所做的是创建两个服务器函数。第一个验证了数据。如果有错误,它将被返回。如果不是错误,我返回了所有序列化/编码为base64字符串的参数。然后,在客户机上,我有一个表单,它只有一个隐藏的输入,并发布到第二个服务器函数。我将隐藏输入设置为base64字符串并提交格式。第二个服务器函数解码/反序列化参数并生成文件。表单可以提交到页面上的新窗口或iframe,文件就会打开。 这需要做更多的工作,也许需要更多的处理,但总的来说,使用这个解决方案我感觉好多了。 代码是C#/MVC
在客户身上
|
|
|
8
8
简而言之,没有比这更简单的方法了。您需要发出另一个服务器请求以显示PDF文件。尽管如此,几乎没有其他选择,但它们并不完美,也不能在所有浏览器上运行:
|
|
|
9
5
|
|
|
10
-2
有了HTML5,你只需创建一个锚并点击它。无需将其作为子项添加到文档中。
都搞定了。
如果你想给下载文件起一个特别的名字,只需在
|
|
|
11
2
我认为最好的方法是使用组合,第二种方法似乎是涉及浏览器的优雅解决方案。 所以这取决于打电话的方式。(无论是浏览器还是web服务调用)您可以将两者结合使用,向浏览器发送URL,并向任何其他web服务客户端发送原始数据。 |
|
|
12
1
我已经醒了两天了,现在正试图弄清楚如何使用jquery和ajax调用下载文件。在我尝试这一点之前,我得到的所有支持都无助于我的处境。 客户端
服务器端
祝你好运 |
|
|
13
0
另一种方法不是将文件保存在服务器上并检索它,而是使用。NET 4.0+ObjectCache,在第二个操作之前有一个短暂的过期时间(此时它可以被最终转储)。我想使用jQueryAjax进行调用的原因是它是异步的。构建动态PDF文件需要相当长的时间,在此期间,我会显示一个繁忙的微调器对话框(它还允许完成其他工作)。使用“success:”中返回的数据创建Blob的方法不可靠。这取决于PDF文件的内容。它很容易被响应中的数据破坏,如果它不是完全文本的,这是Ajax所能处理的。 |
|
14
0
解决方案内容处置附件 似乎对我有用:
变通方法应用程序/八位字节流 在JSON上,我也遇到了类似的事情 服务器端 我正在将标题设置为 自己设置标题(“内容类型” 应用程序/json ") 但是当我把它改成:
它自动下载了它。 也要知道,为了使文件仍能保存。json后缀您需要在文件名标题上添加它:
|
|
|
15
0
制作自己的活动的问题本文提出的许多解决方案都让JavaScript异步运行,并创建一个链接元素,然后调用
或者创建鼠标事件
这看起来不错吧?这有什么问题? 什么是活动来源?事件源在计算领域有很多含义,比如基于云的体系结构中的发布系统,或者浏览器api EventSource .在浏览器的上下文中 所有事件都有一个源,并且该源具有隐藏属性,表明是谁发起了此事件(用户或站点)。 知道了这一点,我们就可以开始理解为什么两个点击事件可能不会被同等对待
所以我不能下载一篇愚蠢的帖子不,你当然可以。你只需要给用户一个创建事件的机会。以下是一些模式,您可以使用它们来创建用户流,这些用户流是明显的、相互影响的,不会被标记为欺诈。(使用jsx sorry not sorry) 表格 可用于通过post操作导航到url。
预加载
如果您的下载是不可配置的,您可能需要考虑将下载预加载到
createObjectURL会在JAVASCRIPT中造成内存泄漏 source如果你不想让C++恶霸来取笑你,你必须释放这个内存。啊,但我只是一个最爱捡垃圾的人。不用担心,这很简单,如果你在大多数框架中工作(对我来说),你只需要在你的组件和你的权利上注册某种清理效果。
|
|
|
16
0
我想我已经接近了,但是有些东西正在破坏文件(图像),不管怎样,也许有人可以透露这种方法的问题
|
|
|
17
0
我喜欢弗兰克的想法,并决定自己改变主意。由于试图在一篇文章中完成这项工作非常复杂,我使用的是两篇文章的方法,但只需点击数据库一次,完成后无需保存文件或清理文件。 首先,我运行ajax请求来检索数据,但不是从控制器返回数据,而是返回一个绑定到记录的TempData存储的GUID。
然后当我打开窗户。位置我将Guid传递给新方法,并从TempData获取数据。执行此方法后,TempData将被释放。
|
|
|
code-geek · Jquery根据单选按钮选择隐藏或显示文本字段 1 年前 |
|
|
Dr.0000FF · jQuery按钮点击不显示/隐藏内容 1 年前 |
|
|
user28928120 · 如何在jquery中选择所有类? 1 年前 |
|
Eliable · 使点击计数器和进度条协同工作 1 年前 |
|
Jack Maessen · 在处理程序上使用时如何获取输入类型 1 年前 |