在JavaScript中,双方window并document拥有location财产,并通过两个设定不同的URL,浏览器加载新的URL.
他们之间有什么区别?
我正在尝试csv从node.js服务器流式传输文件.服务器部分非常简单:
server.get('/orders' function(req, res) {
res.setHeader('content-type', 'text/csv');
res.setHeader('content-disposition', 'attachment; filename='orders.csv');
return orders.pipe(res); // assuming orders is a csv file readable stream (doesn't have to be a stream, can be a normal response)
}
Run Code Online (Sandbox Code Playgroud)
在我的角度控制器中,我试图做这样的事情
$scope.csv = function() {
$http({method: 'GET', url: '/orders'});
};
Run Code Online (Sandbox Code Playgroud)
ng-click在我的视图中点击按钮时调用此函数:
<button ng-click="csv()">.csv</button>
Run Code Online (Sandbox Code Playgroud)
我已经查看了有关从Angular中的服务器下载文件的其他答案,但没有找到任何对我有用的内容.有一个共同的方法来做到这一点?似乎应该很简单.
我正在将数据从服务器传输到客户端以供下载使用filestream.write.在这种情况下,发生的事情是我能够下载该文件,但它不会在我的浏览器中显示为下载."另存为"弹出窗口不会出现在"下载"部分中的"下载栏"中.从四处查看,我想我需要在响应标题中包含"something"来告诉浏览器这个响应有一个附件.我也想设置cookie.要做到这一点,这就是我在做的事情:
[HttpContext.Current.Response.AppendHeader("Content-Disposition","attachment;filename=" & name)]
public ActionResult Download(string name)
{
// some more code to get data in inputstream.
using (FileStream fs = System.IO.File.OpenWrite(TargetFile))
{
byte[] buffer = new byte[SegmentSize];
int bytesRead;
while ((bytesRead = inputStream.Read(buffer, 0, SegmentSize)) > 0)
{
fs.WriteAsync(buffer, 0, bytesRead);
}
}
}
return RedirectToAction("Index");
}
Run Code Online (Sandbox Code Playgroud)
我收到错误:"System.web.httpcontext.current是一个属性,用作类型."
我在正确的位置更新标题吗?有没有其他方法可以做到这一点?
如何在单页应用程序中设置文件下载,而不会触发重新加载?
我遇到过在服务器上生成PDF文件并需要提供给客户端进行下载的情况.将其作为application/octet-stream发送在SPA中没有任何用处,因为无法通过AJAX发送文件.
我想出的最好的方法是将生成的文件保存在服务器上的临时文件夹中,将文件的URL发送到客户端并进行操作window.open(url).问题是不同的浏览器以不同的方式打开文件.例如,Firefox默认情况下使用它们在同一个选项卡中打开PDF,从而PDF.js破坏整个SPA的想法.但做一个window.open(url, '_blank')经常触发弹出窗口拦截器等.其他文件类型可以导致上帝知道什么...
在SPA中下载文件是否有跨浏览器,安全,通用的方法?
我想创建一个允许强制下载JPG的下载文件.这是我的PHP脚本:
<?php
header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Description: File Transfer");
header("Content-Type: image/jpg");
header('Content-Disposition: attachment; filename="'.basename($GET['a']).'"');
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize(($GET['a']));
readfile(($GET['a']);
?>
Run Code Online (Sandbox Code Playgroud)
这是我的js代码的代码段:
function downloadFile(a){
document.location = "download.php?a="+ a;
}
Run Code Online (Sandbox Code Playgroud)
使用此代码示例没有任何反应.如果我将结果附加到HTML标记中,它会显示文件的内容.
有任何想法如何教浏览器下载此文件?
编辑:脚本更新
javascript ×4
ajax ×1
angularjs ×1
asp.net-mvc ×1
browser ×1
c# ×1
document ×1
dom ×1
download ×1
http ×1
http-headers ×1
httpcontext ×1
jquery ×1
node.js ×1
php ×1
response ×1
window ×1