查看存储在 google 云端的数据内容到前端应用程序,而不是下载名称为 blob 的文件

View Content of data stored on google cloud to frontend application instead of download file with the name of blob

我目前正在使用

在云端存储文本
bucket.create(blobName, "hello".getBytes());

Blob 名称看起来像这样 1/1/1674/2020-06-02/9998-2-202062

需求是将多个blob的数据生成pdf文件。我们可以在后端 java 通过从 blob 路径获取内容来做到这一点

Blob blob=bucket.get("1/1/1674/2020-06-02/9998-2-202062");
new String(blob.getContent())

但是我们不想增加服务器的负载,先在服务器上下载内容,然后再发送给前端。所以我们在前端发送符号URL,这样我们就可以通过使用URL在前端(angular 8)获取内容并创建pdf。我们正在以这种方式创建 singurl。

Blob blob=bucket.get("1/1/1674/2020-06-02/9998-2-202062");
URL url=blob.signUrl(1, TimeUnit.HOURS,SignUrlOption.signWith(
           ServiceAccountCredentials.fromStream(new FileInputStream(jsonfilePath))));

但前端的问题是每当我们在任何浏览器上单击 URL 时,它都会下载带有 blob-name
的文件 9998-2-202062 而不是只显示内容。

有什么方法可以让我们从云中读取数据 URL 而不是通过 chrome 自动下载内容? 而且我们不更改浏览器设置,因为它不能在客户端机器上完成?

signUrl method 只为指定的资源创建一个 link,你必须实现一种方法来读取它,加入你想要添加的其余文件并处理它们以创建你的客户端PDF。

就是说,例如,您可以创建一个 javascript 文件,并在另一个可能对您有帮助的 Whosebug 答案的 fetch function to gather all the text from the blobs, I found 中使用带符号的 URL:

Promise.all([
  fetch(signedURL1).then(x => x.text()),
  fetch(signedURL2).then(x => x.text())
]).then(([sampleResp, sample2Resp]) => {
  console.log(sampleResp);
  console.log(sample2Resp);
});

signedURL1signedURL2 替换为您创建的实际签名 URL。

获得文件内容后,您只需创建 PDF,我找到了一个名为 jsPDF 的库,您可能会感兴趣。