相关疑难解决方法(0)

在JavaScript中从base64字符串创建Blob

我在字符串中有base64编码的二进制数据.

const contentType = 'image/png';
const b64Data = 'iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==';
Run Code Online (Sandbox Code Playgroud)

我想创建一个blob:包含此数据的URL并将其显示给用户.

const blob = new Blob(????, {type: contentType});
const blobUrl = URL.createObjectURL(blob);

window.location = blobUrl;
Run Code Online (Sandbox Code Playgroud)

我还没有弄清楚如何创建Blob.

在某些情况下,我可以通过使用data:URL 来避免这种情况.

const dataUrl = `data:${contentType};base64,${b64Data}`;

window.location = dataUrl;
Run Code Online (Sandbox Code Playgroud)

但是在大多数情况下,data:URL非常大.


如何Blob在JavaScript中将base64字符串解码为对象?

javascript base64

405
推荐指数
13
解决办法
39万
查看次数

处理从ajax帖子下载的文件

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

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

编辑:

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

__PRE__

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

javascript ajax jquery

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

使用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万
查看次数

在IE11中打开由createObjectURL创建的链接

为什么不能在以下演示中打开链接:http:
//html5-demos.appspot.com/static/a.download.html

您甚至无法右键单击并在新选项卡/窗口中打开它.我需要自定义浏览器中的任何设置吗?

html javascript internet-explorer blob

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

如何使用window.fetch下载文件?

如果我想下载文件,我应该在then下面的块中做什么?

function downloadFile(token, fileId) {
  let url = `https://www.googleapis.com/drive/v2/files/${fileId}?alt=media`;
  return fetch(url, {
    method: 'GET',
    headers: {
      'Authorization': token
    }
  }).then(...);
}
Run Code Online (Sandbox Code Playgroud)

请注意,代码位于客户端.

javascript fetch fetch-api

37
推荐指数
8
解决办法
4万
查看次数

NodeJS如何从aws s3存储桶将文件下载到磁盘?

我的目标:

显示一个对话框,提示用户保存从aws下载的文件.

我的问题:

我目前正在使用awssum-amazon-s3来创建下载流.但是我只是设法将文件保存到我的服务器或将其流式传输到命令行......正如您从我的代码中看到的,我最后的尝试是尝试手动设置失败的内容处置标头.我不能使用res.download(),因为标题已经设置好了?

我怎样才能实现目标?

我的节点代码:

app.post('/dls/:dlKey', function(req, res, next){
        // download the file via aws s3 here
        var dlKey = req.param('dlKey');

        Dl.findOne({key:dlKey}, function(err, dl){
            if (err) return next(err);
            var files = dl.dlFile;

            var options = {
                BucketName    : 'xxxx',
                ObjectName    : files,
            };

            s3.GetObject(options, { stream : true }, function(err, data) {
                // stream this file to stdout
                fmt.sep();
                data.Headers['Content-Disposition'] = 'attachment';
                console.log(data.Headers);
                data.Stream.pipe(fs.createWriteStream('test.pdf'));
                data.Stream.on('end', function() {
                    console.log('File Downloaded!');
                });
            });
        });

        res.end('Successful Download Post!');
    });
Run Code Online (Sandbox Code Playgroud)

我的角度代码:

$scope.dlComplete = …
Run Code Online (Sandbox Code Playgroud)

disk download amazon-s3 amazon-web-services node.js

30
推荐指数
6
解决办法
5万
查看次数

下载文件并通过ajax将其重定向到另一个页面

我有一个简单的下载excel文件的联系表格.主要问题发生,当ajax加载.我想下载excel文件然后将用户重定向到下一页..下面是我的代码与虚拟数据..

Ajax代码..

$.ajax({
    type: "POST",
    url: "/site/ajaxexcel.php", 
    data: {'value':'send'},
    cache: false,
    success: function(html){
        location.href = '<?php echo base_url()."/site/welcome.php" ?>';                 
    }
});
Run Code Online (Sandbox Code Playgroud)

我的ajaxexcel.php代码是:

<?php 
$content= '<html xmlns:x="urn:schemas-microsoft-com:office:excel">
<head>
    <!--[if gte mso 9]>
    <xml>
        <x:ExcelWorkbook>
            <x:ExcelWorksheets>
                <x:ExcelWorksheet>
                    <x:Name>Sheet 1</x:Name>
                    <x:WorksheetOptions>
                        <x:Print>
                            <x:ValidPrinterInfo/>
                        </x:Print>
                    </x:WorksheetOptions>
                </x:ExcelWorksheet>
            </x:ExcelWorksheets>
        </x:ExcelWorkbook>
    </xml>
    <![endif]-->
</head>

<body><table class="table table-condensed table-striped table-hover table-bordered pull-left" id="myTable"><thead><tr><th>Rakesh</th><th>kumar</th></tr></thead><tbody><tr><th>Rakesh</th><th>Rakesh</th></tr><tr><th>Rakesh</th><th>Rakesh</th></tr><tr><th>Rakesh</th><th>Rakesh</th></tr><tr><th>Rakesh</th><th>Rakesh</th></tr></tbody></table></body></html>';
header('Content-type: application/excel');
header('Content-type: image/jpeg,image/gif,image/png');
header("Content-Disposition: attachment; filename=download.xls");
header("Pragma: ");
header("Cache-Control: ");
echo $content;
?>
Run Code Online (Sandbox Code Playgroud)

我想只下载excel文件,然后将用户重定向到特定位置.

如果您已正确完成,也可以帮助我使用您的codeigniter代码.

ajax jquery wiki codeigniter

26
推荐指数
2
解决办法
3768
查看次数

在WebApp中创建和下载大型ZIP(来自多个BLOB)的最佳实践

我需要从我的Web应用程序执行大量的文件下载.

显然,这是一个长期运行的行动(它将每年使用一次[-per-customer]),所以时间不是问题(除非它达到一些超时,但我可以通过创造某种形式的keepalive心跳).我知道如何创建一个隐藏的iframe并使用它content-disposition: attachment来尝试下载文件而不是在浏览器中打开它,以及如何实例化客户端 - 服务器通信以绘制进度表;

下载的实际大小(和文件数量)是未知的,但为了简单起见,我们实际上可以将其视为1GB,由100个文件组成,每个10MB.

由于这应该是一键操作,我的第一个想法是将所有文件分组,同时从动态生成的ZIP中从数据库中读取它们,然后要求用户保存ZIP.

问题是:在WebApp中从多个小字节数组创建大型存档时,最佳实践什么,以及已知的缺点和陷阱是什么?

这可以随机分为:

  • 应该在物理临时文件中转换每个字节数组,还是可以将它们添加到内存中的ZIP中?
  • 如果是的话,我知道我必须处理可能的名称相等(它们可以在数据库中的不同记录中具有相同的名称,但不能在同一文件系统或ZIP中):是否存在任何其他可能出现的问题介意(假设文件系统总是有足够的物理空间)?
  • 因为我不能依赖足够的RAM来执行内存中的整个操作,我想应该创建ZIP并将其发送到文件系统,然后再发送给用户; 有没有办法以不同的方式做到这一点(例如使用websocket),比如询问用户在哪里保存文件,然后从服务器到客户端开始一个恒定的数据流(科幻我猜)?
  • 我们将非常感谢任何其他相关的已知问题或最佳实践.

java filesystems zip web-applications

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

How to download large file with JavaScript

I need to download a large file with JavaScript using XMLHttpRequest or fetch without saving the file first in the RAM-Memory.

Normal link download doesn't work for me, because I need to send a Bearer Token in the header of the request.

我可以设法下载一个文件,但是这个“解决方案”,它首先将文件保存在 RAM 内存中,然后再出现保存对话框,这样如果文件大于可用的 RAM 内存,浏览器就会刹车。

这是我使用 fetch 的“解决方案”:

        var myHeaders = new Headers();
        myHeaders.append('Authorization', `Bearer ${token}`);

        var myInit = { method: 'GET',
            headers: myHeaders,
            mode: 'cors',
            cache: 'default' };
        var a = document.createElement('a');

        fetch(url,myInit)
            .then((response)=> {
                return response.blob(); …
Run Code Online (Sandbox Code Playgroud)

javascript xmlhttprequest fetch-api

8
推荐指数
1
解决办法
6819
查看次数