当前位置: 首页 > 面试题库 >

如何使用Google Cloud Endpoints返回文件?

柯捷
2023-03-14
问题内容

我有一种生成带有一些数据库记录的CSV文件的方法

    public static void generateCsvForAttendees( List<Attendee> attendeeList ) throws FileNotFoundException
    {
        PrintWriter pw = new PrintWriter(new File("test.csv"));

        StringBuilder sb = new StringBuilder();

        //Header
        sb.append( "Id" );
        sb.append( ',' );
        sb.append( "Name" );
        sb.append( ',' );
        sb.append( "Lastname" );
        sb.append('\n');

        //Content
        for( Attendee attendee: attendeeList )
        {
            sb.append( attendee.getId() );
            sb.append( ',' );
            sb.append( attendee.getUser().getName() );
            sb.append( ',' );
            sb.append( attendee.getUser().getLastname() );
            sb.append( '\n' );

        }

        pw.write(sb.toString());
        pw.close();
    }

我希望该方法是一个端点,以便从任何类型的客户端(Web或移动设备)调用它以下载它。在Google Cloud
Endpoint文档中
,没有关于File作为有效返回类型的信息。我如何创建并终结返回文件的文件?


问题答案:

这是将文件从端点保存到Cloud Storage并返回用于下载文件的URL的方法。

1 /在您的项目控制台中激活Google Cloud Storage

2 /在您的Cloud Storage实例中创建一个名称为bucketName的存储桶。可选:您可以在此存储桶上设置访问权限。

3 /在您的终结点类中,创建一个gcsService作为以下对象:

private final GcsService gcsService = GcsServiceFactory.createGcsService(new RetryParams.Builder()
        .initialRetryDelayMillis(10)
        .retryMaxAttempts(10)
        .totalRetryPeriodMillis(15000)
        .build());

4 /在您的方法中,创建一个ByteArrayOutputStream:

ByteArrayOutputStream os = new ByteArrayOutputStream();

5 /从ByteArrayOutputStream创建打印机

6 /然后执行以下操作:

ByteBuffer buf = ByteBuffer.wrap(os.toByteArray());
GcsFilename gcsfileName = new GcsFilename(bucketName, bucketFileName);
//bucketFileName =  your file name
GcsFileOptions options = new GcsFileOptions.Builder().mimeType("text/plain").build();
GcsOutputChannel outputChannel = gcsService.createOrReplace(gcsfileName, options);
outputChannel.write(buf);
outputChannel.close();

7 /然后,您的文件应保存到Cloud
Storage:您只需要在字符串包装器中返回URL即可打开它。查看以下文档,以确定要使用的URL(取决于是否对用户进行身份验证,请参阅“授予用户对对象的读取权限”部分)https://cloud.google.com/storage/docs/云控制台#_访问



 类似资料:
  • 我使用Springboot,我想生成zip文件,然后返回前端。

  • 问题内容: 到目前为止,我将通过以下方式返回html我的主页: 我想要做的是返回home.html本身,而不是复制其内容并返回字符串。 我该怎么做呢?谢谢 :) 问题答案: 您可以只返回或的实例,JAX-RS会做正确的事。

  • 问题内容: 我有一个档案 用户来 我希望用户的浏览器开始下载文件。我怎么做?readfile是否在服务器上打开文件,这似乎是不必要的事情。有没有一种方法可以在不打开服务器的情况下返回文件? 问题答案: 我想你想要这个:

  • 问题内容: 我使用此建议执行了JavaScript,并且想从此脚本返回一个值。 问题答案: 您可以像这样返回值: Java: 蟒蛇:

  • 问题内容: 我不知道如何用代码返回JSON数据。 JS C#的Default.aspx.cs 提前致谢! 问题答案: 你不远 您需要执行以下操作: 您可以进一步减少此代码,但为清晰起见,我将其保留下来。实际上,您甚至可以这样写: 这将返回一个json字符串。我宁愿更加明确,因为我使用自定义转换器。也有Json.net,但是框架的工作开箱即可。

  • 问题内容: 我正在使用Bottle编写一个API ,到目前为止,一切都很棒。但是,在尝试返回JSON数组时遇到了一个小障碍。这是我的测试应用程序代码: 当我运行它并请求每条路线时,我会从前两条路线得到我期望的JSON响应: /单 / containsarray 因此,我曾期望返回一个字典列表来创建以下JSON响应: 但是,请求路线只会导致错误。我在做什么错,如何以这种方式返回JSON数组? 问题答