Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 使用gdal在S3中保存图像_Python 2.7_Amazon S3_Gdal - Fatal编程技术网

Python 2.7 使用gdal在S3中保存图像

Python 2.7 使用gdal在S3中保存图像,python-2.7,amazon-s3,gdal,Python 2.7,Amazon S3,Gdal,我正在进行一个项目,需要使用Gdal python库将图像保存到S3。 更具体地说,我收到一个表示该图像的np数组,我想将其发送到我拥有的S3存储桶 我该怎么做?我是一个安静的新手,在格达尔的网站上找不到答案 我们将不胜感激 您有两个选择 我假设您已经在您的机器上设置了AWS凭据,因为boto3正在使用它。如果不是,我认为这超出了这个问题的范围 最简单的方法是将数据集保存到磁盘上的文件中,然后将其上载 我假设磁盘上没有数据集?如果数据集中已有tif文件,则可以忽略createcopy部分 imp

我正在进行一个项目,需要使用Gdal python库将图像保存到S3。 更具体地说,我收到一个表示该图像的np数组,我想将其发送到我拥有的S3存储桶

我该怎么做?我是一个安静的新手,在格达尔的网站上找不到答案

我们将不胜感激

您有两个选择

我假设您已经在您的机器上设置了AWS凭据,因为boto3正在使用它。如果不是,我认为这超出了这个问题的范围

最简单的方法是将数据集保存到磁盘上的文件中,然后将其上载

我假设磁盘上没有数据集?如果数据集中已有tif文件,则可以忽略createcopy部分

import boto3

# If you only have your dataset in memory, save your dataset in a tif file on disk
driver = gdal.GetDriverByName('GTiff')
driver.CreateCopy('path_to_tif_file.tif', your_dataset)

s3 = boto3.client('s3')
s3.upload_file('path_to_tif_file.tif', 'bucket_name', 'path_on_s3.tif')
如果您不想将tif文件保存在磁盘上

您还可以将数据集直接上载到S3,不过这稍微复杂一些

import boto3

def put_tif_from_gdal_mem_dataset(key, dataset, bucket_name):
    # Load the dataset into the virtual filesystem
    temp_name = '/vsimem/current.tif'
    tiff_driver = gdal.GetDriverByName('GTiff')
    tiff_driver.CreateCopy(temp_name, dataset)
    # Read the raw data from the virtual filesystem
    f = gdal.VSIFOpenL(temp_name, 'rb')
    gdal.VSIFSeekL(f, 0, 2)  # seek to end
    size = gdal.VSIFTellL(f)
    gdal.VSIFSeekL(f, 0, 0)  # seek to beginning
    data = gdal.VSIFReadL(1, size, f)
    gdal.VSIFCloseL(f)
    # Upload the raw data to s3
    s3.put_object(Key=key, Bucket=bucket_name, Body=data, ContentLength=size)
    gdal.Unlink(temp_name)

put_tif_from_gdal_mem_dataset('path_on_s3.tif', your_dataset, 'bucket_name')

所以你需要它成为GeoTiff,或者为什么你必须使用GDAL来完成这个任务?如果它只是一个numpy数组,您还可以使用一些更简单的图像库来保存它?或者是你需要保存到s3的GDAL数据集?我需要保存的是GDAL数据集我正试图用MRF格式做类似的事情,但遇到了错误。表示错误6:MRF PNG不支持数据类型。不过,我可以使用tif使此工作流正常工作。有什么想法吗?