0

我有一个 rake 任务,它将生成一个特定的 CSV 文件。我希望能够下载将放在 /tmp 中的 CSV 文件。

我的应用程序托管在 Heroku 中。如何下载该 CSV 文件?

4

4 回答 4

3

如果您只想一次性下载,可以尝试使用heroku exec. 该exec命令允许您创建与测功机的 SSH 连接 - https://devcenter.heroku.com/changelog-items/1112

首先,找出文件路径。您可以运行bash,然后执行通常的 bash 命令,例如ls

heroku ps:exec -a <myapp> bash

接下来,使用cat读取文件,并将输出通过管道传输到本地文件:

heroku ps:exec -a <myapp> cat tmp/myfile.csv > mylocal.csv

于 2019-05-13T10:11:35.333 回答
1

Heroku 上的/tmp目录就是这样——临时的。即使您将文件存储在文件中/tmp,它也不会保留足够长的时间,以至于任何用户都可以访问它。相反,您应该研究像Amazon AWS这样的集成存储解决方案。

有了这些,您的用户应该能够直接从您的存储主机访问这些 CSV 文件,而无需占用任何 Heroku dynos/资源。

于 2013-07-08T12:19:01.597 回答
0

为什么必须将它放在 tmp 文件夹中?如果你生成一些东西,它必须是重要文件而不是临时文件......

解决方案很简单,只需将文件保存到公共目录(或公共目录的子目录)的方式设置您的 rake 任务

然后你可以打开/下载你的export.csv使用

http://your-domain/[subdirectory-in-public-directory]/export.csv网址

于 2013-07-08T12:18:36.857 回答
0

tmp 目录下的文件每天都被清空,tmp 目录住@:

/应用程序/tmp

其中 app 是根目录

要从中下载文件,您可以读取文件并将其转换为 base 64 并将其作为数据 URL 发送回客户端:

服务器:

    let filePath = path.join(__dirname, '..', '..', 'tmp', fileName);

fs.readFile(filePath, {encoding: 'base64'}, function (err, data) {
                        if (!err) {
                            let returnData = `data:${mimeType};base64,` + data;
                            res.json({fileName: fileName, displayName: displayName, base64: returnData})
                        } else {
                            console.log(err);
                        }
                    });

客户端:

 function b64toBlob(dataURI) {

    var byteString = atob(dataURI.split(',')[1]);
    var ab = new ArrayBuffer(byteString.length);
    var ia = new Uint8Array(ab);

    for (var i = 0; i < byteString.length; i++) {
        ia[i] = byteString.charCodeAt(i);
    }
    return new Blob([ab], { type: 'image/jpeg' });
}


        var blob = b64toBlob(res.data.base64);

        var blobUrl = URL.createObjectURL(blob);
        var link = document.createElement("a"); // Or maybe get it from the current document
        link.href = blobUrl;
        link.download = res.data.displayName;
        document.body.appendChild(link)
        link.click()
于 2019-11-28T14:14:00.607 回答