有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将存储在google云上的数据内容查看到前端应用程序,而不是下载名为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())

但是,我们不希望通过先在服务器上下载内容,然后再将其发送到前端来增加服务器上的负载。因此,我们在前端发送signURL,这样我们就可以通过使用该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名称为
的文件 9998-2-202062,而不仅仅是显示内容

有没有办法让我们从云URL读取数据,而不是通过chrome自动下载内容? 我们不改变浏览器设置,因为它不能在客户机上完成


共 (1) 个答案

  1. # 1 楼答案

    signUrl method只创建指向指定资源的链接,您必须实现一种方法来读取它,连接要添加的其余文件,并处理它们,以便在客户端创建PDF

    也就是说,例如,您可以创建一个javascript文件并使用fetch function中的签名URL来收集blob中的所有文本,我在另一个stackoverflow答案上发现this example,这可能会帮助您:

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

    替换所创建的实际签名URL的signedURL1signedURL2

    一旦你有了文件的内容,你只需要创建PDF,我发现了一个名为jsPDF的库,这可能是你感兴趣的