相关疑难解决方法(0)

您可以使用流而不是本地文件上传到S3吗?

我需要创建一个CSV并将其上传到S3存储桶.因为我正在动态创建文件,所以如果我可以直接将它写入S3存储桶,而不是在本地编写整个文件,然后在最后上传文件,那会更好.

有没有办法做到这一点?我的项目是用Python编写的,我对这门语言还不熟悉.这是我到目前为止尝试的内容:

import csv
import csv
import io
import boto
from boto.s3.key import Key


conn = boto.connect_s3()
bucket = conn.get_bucket('dev-vs')
k = Key(bucket)
k.key = 'foo/foobar'

fieldnames = ['first_name', 'last_name']
writer = csv.DictWriter(io.StringIO(), fieldnames=fieldnames)
k.set_contents_from_stream(writer.writeheader())
Run Code Online (Sandbox Code Playgroud)

我收到此错误:BotoClientError:s3不支持分块传输

更新:我找到了一种直接写入S3的方法,但是我找不到清除缓冲区的方法而没有实际删除我已编写的行.所以,例如:

conn = boto.connect_s3()
bucket = conn.get_bucket('dev-vs')
k = Key(bucket)
k.key = 'foo/foobar'

testDict = [{
    "fieldA": "8",
    "fieldB": None,
    "fieldC": "888888888888"},
    {
    "fieldA": "9",
    "fieldB": None,
    "fieldC": "99999999999"}]

f = io.StringIO()
fieldnames = ['fieldA', 'fieldB', 'fieldC']
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader()
k.set_contents_from_string(f.getvalue())

for …
Run Code Online (Sandbox Code Playgroud)

python csv amazon-s3 buffering boto

29
推荐指数
1
解决办法
2万
查看次数

如果我已经在 Conduit 中,如何上传到 S3?

在 Haskell 中,我通过管道处理一些数据。在该处理过程中,我想有条件地将数据存储在 S3 中。是否有任何 S3 库可以让我执行此操作?实际上,我想要做的是“tee”由管道创建的管道,并将其包含的数据放在 S3 上,同时继续处理它。

我找到了 aws 库(https://hackage.haskell.org/package/aws),但是像这样的函数multipartUpload将 a 作为Source参数。鉴于我已经在导管内,这似乎不是我可以使用的东西。

haskell amazon-s3

5
推荐指数
1
解决办法
409
查看次数

压缩数据并将其上传到 S3 而不将全部内容保留在内存中

我想压缩使用 GZIP 流动态创建的数据并将其上传到 S3,同时我希望每个压缩文件的数据为 ±1Giga。

由于文件很大,而且我要并行处理多个文件,我无法将整个数据保存在内存中,我希望尽快将数据流式传输到 S3。

此外,我无法知道压缩数据的确切大小。阅读这个问题“我可以在没有内容长度标头的情况下将文件上传到 S3 吗? ”但我不知道如何将它与 GZIPing 结合起来。

我想我可以做到这一点,如果我能够创建GZIPOutputStream,将数据逐部分发送给它,同时读取压缩数据的块(希望是 5Mb)并使用Amazon S3将它们上传到S3:分段上传

我正在尝试做的是可能的吗?或者我唯一的选择是将数据压缩到本地存储(我的硬盘)然后上传压缩文件?

java file-upload amazon-s3 aws-sdk

4
推荐指数
1
解决办法
4411
查看次数

使用 boto3 将大字符串流式传输到 S3

我正在从 S3 下载文件,转换其中的数据,然后创建一个新文件上传到 S3。我下载的文件不到 2GB,但因为我正在增强数据,所以当我上传它时,它非常大(200GB+)。

目前你可以想象的代码是这样的:

files = list_files_in_s3()
new_file = open('new_file','w')
for file in files:
    file_data = fetch_object_from_s3(file)
    str_out = ''
    for data in file_data:
        str_out += transform_data(data)
    new_file.write(str_out)
s3.upload_file('new_file', 'bucket', 'key')
Run Code Online (Sandbox Code Playgroud)

这样做的问题是“new_file”有时太大而无法放在磁盘上。因此,我想使用 boto3upload_fileobj以流形式上传数据,这样我根本不需要磁盘上的临时文件。

有人可以帮忙提供一个例子吗?Python 方法似乎与我熟悉的 Java 完全不同。

amazon-s3 python-3.x boto3

4
推荐指数
1
解决办法
5316
查看次数

标签 统计

amazon-s3 ×4

aws-sdk ×1

boto ×1

boto3 ×1

buffering ×1

csv ×1

file-upload ×1

haskell ×1

java ×1

python ×1

python-3.x ×1