Javascript 乌什(拜特里); } var blob=新blob(byteArray,{type:contentType}); 返回斑点; }

Javascript 乌什(拜特里); } var blob=新blob(byteArray,{type:contentType}); 返回斑点; },javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,这是我用来下载我们的Django服务器按需生成的PDF的,她似乎运行得非常好 附录 我们的网站之所以这样做,而不仅仅是为了在后续调用中返回文件名,是因为它在服务器I/O上更容易一些。选择的解决方案意味着请求的文件必须存在于服务器上的某个位置—很可能存在于磁盘上。(可以使用PHP的tmpfile()将生成的文件保存在内存中,但我对PHP的了解有限,因此我不知道如何在HTTP调用之间保存该文件) 我的项目制作了大量的PDF文件,可能有数百页。我真的,真的不想从这些数据中创建一个实际的文件对象,将其保

这是我用来下载我们的Django服务器按需生成的PDF的,她似乎运行得非常好

附录

我们的网站之所以这样做,而不仅仅是为了在后续调用中返回文件名,是因为它在服务器I/O上更容易一些。选择的解决方案意味着请求的文件必须存在于服务器上的某个位置—很可能存在于磁盘上。(可以使用PHP的
tmpfile()
将生成的文件保存在内存中,但我对PHP的了解有限,因此我不知道如何在HTTP调用之间保存该文件)

我的项目制作了大量的PDF文件,可能有数百页。我真的,真的不想从这些数据中创建一个实际的文件对象,将其保存到磁盘,然后几乎立即将其从磁盘中读取回来(我知道服务器并不是这样做的,但无论如何,您将其切片—它做的工作超出了需要)。服务器制作了PDF,它在内存中,为什么不只是。。。把它还给客户


像这样返回文件意味着不需要做任何额外的清理工作——一旦Base64离开大楼,就这样了。磁盘上没有文件,因此以后没有什么需要处理的(好的或坏的,取决于您的需要)。

您能解释一下您真正想要做什么吗?我真的不明白你的要求。@lexith我正在尝试在我的客户端上获得“另存为”对话框,该对话框是用HTML/jQuery编写的。好吧,那么你提到的建议解决方案有什么问题?你说过你知道用ajax做不到,错的是它在客户端不起作用,这意味着不会出现“另存为”对话框。我可能把事情搞混了,因为它不是通过Rob提供的解决方案工作的。谢谢你,莱克西斯!你能解释一下你到底想做什么吗?我真的不明白你的要求。@lexith我正在尝试在我的客户端上获得“另存为”对话框,该对话框是用HTML/jQuery编写的。好吧,那么你提到的建议解决方案有什么问题?你说过你知道用ajax做不到,错的是它在客户端不起作用,这意味着不会出现“另存为”对话框。我可能把事情搞混了,因为它不是通过Rob提供的解决方案工作的。谢谢你,莱克西斯!哇!我看不见树林,看不见树木。我用解决方案更新了我的问题。谢谢哇!我看不见树林,看不见树木。我用解决方案更新了我的问题。谢谢你为什么这样做而不是直接分发PDF?我的意思是,除了造成额外的流量,你为什么不直接分发PDF,而是这样做呢?我的意思是除了造成额外的交通。
http://localhost:8080/slim3/public/api/v1/files/Test1.jpg
http://localhost:8080/slim3/public/api/v1/files/Test2.txt
...
$(document).ready(function(){
   $(document).on('click', '#file', function(e){   
        e.preventDefault();
        var filename = $(this).data('url'); 
        $.ajax({
            type : "GET",
            cache: false,
            url : "http://localhost:8080/slim3/public/api/v1/files/" + filename,   
            success : function(data) {
                console.log(data) // the console writes nothing 
                //window.location = "data:application/octet-stream," + encodeURIComponent(data); // not working            
                //var downloadUrl = data.url; // not working
                //window.location = downloadUrl; // // not working
            },
            error : function(data) {}
        });
   });
});
public function show($request, $response, $args)
{               
    $file = 'C:\xampp\htdocs\slim3\storage\Test1.jpg';

    $res = $response->withHeader('Content-Description', 'File Transfer')
               ->withHeader('Content-Type', 'application/octet-stream')
               ->withHeader('Content-Disposition', 'attachment;filename="'.basename($file).'"')
               ->withHeader('Expires', '0')
               ->withHeader('Cache-Control', 'must-revalidate')
               ->withHeader('Pragma', 'public')
               ->withHeader('Content-Length', filesize($file));
    readfile($file);
    return $res;
}
   $(document).on('click', '#file', function(e){   
        e.preventDefault();
        var filename = $(this).data('url'); 
        window.location = "http://localhost:80/slimmi/public/api/v1/files/" + filename;        
   });
var url = $(this).data('url');
var filename = url.substring(url.lastIndexOf("/") + 1, url.length);
$.ajax({
        type: "GET",
        url: target,
        success: function (response) {
            // create a download anchor tag
            var downloadLink = document.createElement('a');
            downloadLink.target = '_blank';
            downloadLink.download = 'your-file-name-here';

            // convert Base64 to Blob - don't forget to set content type!
            var blob = b64toBlob(response, [file type here]);

            // create an object URL from the Blob
            var URL = window.URL || window.webkitURL;
            var downloadUrl = URL.createObjectURL(blob);

            // set object URL as the anchor's href
            downloadLink.href = downloadUrl;

            // append the anchor to document body
            document.body.appendChild(downloadLink);

            // fire a click event on the anchor
            downloadLink.click();

            // cleanup: remove element and revoke object URL
            document.body.removeChild(downloadLink);
            URL.revokeObjectURL(downloadUrl);
        }
    });
function b64toBlob(b64Data, contentType, sliceSize) {
    contentType = contentType || '';
    sliceSize = sliceSize || 512;

    var byteCharacters = atob(b64Data);
    var byteArrays = [];

    for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {
        var slice = byteCharacters.slice(offset, offset + sliceSize);

        var byteNumbers = new Array(slice.length);
        for (var i = 0; i < slice.length; i++) {
            byteNumbers[i] = slice.charCodeAt(i);
        }

        var byteArray = new Uint8Array(byteNumbers);

        byteArrays.push(byteArray);
    }

    var blob = new Blob(byteArrays, {type: contentType});
    return blob;
}