当前位置: 首页 > 知识库问答 >
问题:

是否可以使用s3 java sdk通过流写入s3

祁建业
2023-03-14

通常,当一个文件必须上传到s3时,它必须首先写入磁盘,然后使用像TransferManager api这样的应用程序上传到云端。如果上传不能按时完成,这会导致数据丢失(应用程序宕机并在不同的服务器上重新启动,等等)。所以我想知道是否有可能直接通过网络写入一个流,并将所需的云位置作为接收器。

共有3个答案

袁英豪
2023-03-14

有可能:

AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
    .build();
s3Client.putObject("bucket", "key", youtINputStream, s3MetData)

亚马逊3。putObject

邵文乐
2023-03-14

令人惊讶的是,这是不可能的(在写这篇文章的时候)标准JavaSDK。无论如何,由于这个第三方库,你至少可以避免缓冲大量的数据到内存或磁盘,因为它在内部缓冲约5MB的部分,并在多部分上传中自动上传。

SDK存储库中还有一个github问题,您可以通过它来获取更新。

云胤
2023-03-14

你不会说你在用什么语言,但我会根据你的大写字母假设Java。在这种情况下,答案是肯定的:TransferManager有一个upload()方法,它接受一个PutObjectRequest,您可以围绕一个流构造该对象。

但是,有两个重要的注意事项。第一个是在PutObjectRequest的留档中:

当直接从输入流上传时,必须指定内容长度才能将数据上传到Amazon S3

所以在开始之前,你必须知道你上传了多少数据。如果你从网上收到一个上传文件,并且有一个内容长度标题,那么你可以从中获取大小。如果只是读取任意长度的数据流,那么必须先将其写入文件(否则SDK会)。

第二个警告是,这并不能防止数据丢失:您的程序仍然可以在读取数据的中间崩溃。它将阻止的一件事是在将数据存储到S3之前将成功代码返回给用户,但您可以通过文件来实现这一点。

 类似资料:
  • 我正在开发一个应用程序,用户必须从列表中选择任意数量的国家,我必须通过多部分发送所选的名称。 但是,在所有的尝试中,我都得到了错误retrofit.retrofiterror:Part body不能为null。 我还提到,ChangeLog for refitfit提到“new:Support iterable and array参数使用OKHTTP的”,但是经过深入研究,我发现给定的示例相当混乱

  • 任何关于直接远程访问(不使用ssh->kubectl代理来避免在Kubernetes节点上进行用户管理)的详细实用指南都将不胜感激。:) 更新: 只是想说清楚点。这是在前提部署中的裸机(没有GCE、AWZ、Azure或任何其他),而且有些环境将完全脱机(这将增加获得安装包的额外问题)。 因此,当我在Kubernetes上设置入口时,我无法创建将443重定向到6443的防火墙规则。似乎唯一的选择是创

  • 我需要一个不可重入的读写锁,因为锁可能由获取它的线程以外的线程释放。(我意识到这一点时,我开始间歇性地获取非法监视器状态异常。) 我不确定不可重入是否是正确的术语。ReentrantLock允许当前持有锁的线程再次获取它。我不想要这种行为,因此我称之为“不可重入”。 上下文是我有一个使用线程池的套接字服务器。每个连接没有一个线程。请求可能由不同的线程处理。客户端连接可能需要在一个请求中锁定,在另一

  • 问题内容: 使用时,我想通过引用传递参数。我该怎么做。例如 问题答案: 要使用进行引用传递,数组中的参数必须是引用-是否通过引用传递不依赖于函数定义。例如,这将起作用: 有关更多信息,请参见功能文档上的注释。

  • 我计划开发一个基于web的聊天应用程序,它接收ReSTful请求,将它们转换为XMPP,并将它们发送到XMPP服务器。 在这种基于聊天的应用程序中使用WebSocket看起来很有希望,因为事件(或响应)可以异步传递。但是,如果我使用WebSocket作为从浏览器传输请求的底层协议,这仍然可以被视为ReSTful设计吗?如果是的话,URI、动词(GET、POST…)是怎样的,websocket消息中

  • 问题内容: 我想使用JavaScript将数据写入现有文件。我不想在控制台上打印它。我想实际将数据写入。我读了许多已回答的问题,但是他们在控制台上打印的每个位置。在某些地方,他们给出了代码,但是没有用。因此,请任何人帮助我如何实际将数据写入File。 我引用了代码,但是它不起作用:给出错误: 未捕获的TypeError:非法构造函数 在铬和 SecurityError:操作不安全。 在Mozill