我有一个生成带有一些db记录的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 documentation中,没有关于File作为有效返回类型的内容。我如何创建和返回文件的端点?
答案 0 :(得分:4)
以下是如何将文件从端点保存到云存储并返回用于下载的URL。
1 /在项目控制台中激活Google云端存储
2 /在您的云存储实例中创建一个名为bucketName的存储桶。可选:您可以在此存储桶上设置访问权限。
3 /在您的端点类中,创建一个gcsService作为folllow:
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 /然后您的文件应保存到云存储:您只需在字符串包装器中返回要打开它的URL。查看以下文档以确定要使用的URL(取决于是否应对用户进行身份验证,请参阅部分&#34;授予用户对对象的读取权限&#34;)https://cloud.google.com/storage/docs/cloud-console#_accessing
答案 1 :(得分:0)
CSV文件很容易在客户端中使用 - 毕竟,它们都是带有逗号和引号的特殊格式的字符串,而不是。你可以做的只是在你的端点方法中返回一个字符串 - 整个字符串就是你的CSV文件。然后在客户端中,您知道String是CSV,因此请相应地处理它(即将其写入文件并使用.csv扩展名保存)。
Cloud Endpoints实际上只返回一个JSON字符串。您也可以尝试Base64编码File to String,然后解码客户端中的Base64字符串,但在我看来,从CSV文件开始我可能更容易做。您从GAE获得的响应也有1MB的限制。在此处阅读更多相关信息:Query response size limit on appengine?