Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.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 如何使用boto在s3上上载名为的批处理图像?_Python_Amazon Web Services_Boto3 - Fatal编程技术网

Python 如何使用boto在s3上上载名为的批处理图像?

Python 如何使用boto在s3上上载名为的批处理图像?,python,amazon-web-services,boto3,Python,Amazon Web Services,Boto3,我正在将图像上载到当前位于本地的文件夹中。类似于站点/上传。 在搜索之后,我得到了将图像上传到s3的方法,我必须这样做 import boto3 s3 = boto3.resource('s3') # Get list of objects for indexing images=[('image01.jpeg','Albert Einstein'), ('image02.jpeg','Candy'), ('image03.jpeg','Armstrong'),

我正在将图像上载到当前位于本地的文件夹中。类似于站点/上传。 在搜索之后,我得到了将图像上传到s3的方法,我必须这样做

import boto3

s3 = boto3.resource('s3')

# Get list of objects for indexing
images=[('image01.jpeg','Albert Einstein'),
      ('image02.jpeg','Candy'),
      ('image03.jpeg','Armstrong'),
      ('image04.jpeg','Ram'),
      ('image05.jpeg','Peter'),
      ('image06.jpeg','Shashank')
      ]

# Iterate through list to upload objects to S3   
for image in images:
    file = open(image[0],'rb')
    object = s3.Object('rekognition-pictures','index/'+ image[0])
    ret = object.put(Body=file,
                    Metadata={'FullName':image[1]}
                    )
澄清


我的代码是将图像和名称发送到S3。但是我不知道如何在这行代码中获取图像
images=[('image01.jpeg','Albert Einstein'),
比如我如何从/upload/image01.jpeg中获取这段代码中的图像。第二,我如何从s3中获取图像并在我的网站图像页面中显示?

使用资源方法:

# Iterate through list to upload objects to S3
bucket = s3.Bucket('rekognition-pictures')

for image in images:
    bucket.upload_file(Filename='/upload/' + image[0],
                       Key='index/' + image[0],
                       ExtraArgs={'FullName': image[1]}
                      )
使用客户端方法:

import boto3

client = boto3.client('s3')

...

# Iterate through list to upload objects to S3
for image in images:
    client.upload_file(Filename='/upload/' + image[0],
                       Bucket='rekognition-pictures',
                       Key='index/' + image[0],
                       ExtraArgs={'FullName': image[1]}
                      )

我知道您的问题是针对boto3的,因此您可能不喜欢我的答案,但它将实现与您希望实现的结果相同的结果,aws cli也使用boto3

请看这里:

此示例来自站点,可以轻松地在脚本中使用:

#!/bin/bash
#copy all files in my-data-dir into the "data" directory located in my-s3-bucket 
aws s3 cp my-data-dir/ s3://my-s3-bucket/data/ --recursive

首先,您显示为参考的代码段不适用于您的用例,因为我编写了用于从boto3批量上传的代码段,在boto3中,您必须在脚本中提供图像路径以及图像的元数据,因此代码段中的名称是元数据。因此,就我从您的问题中了解到的内容而言,您希望上载本地文件夹中的文件,并希望在上载之前提供自定义名称,所以这就是您将如何做到的

import os
import boto3

s3 = boto3.resource('s3')

directory_in_str="E:\\streethack\\hold"

directory = os.fsencode(directory_in_str)

for file in os.listdir(directory):
    filename = os.fsdecode(file)
    if filename.endswith(".jpeg") or filename.endswith(".jpg") or filename.endswith(".png"):

        strg=directory_in_str+'\\'+filename
        print(strg)
        print("Enter name for your image : ")
        inp_val = input()

        strg2=inp_val+'.jpeg'
        file = open(strg,'rb')
        object = s3.Object('mausamrest','test/'+ strg2)     #mausamrest is bucket
        object.put(Body=file,ContentType='image/jpeg',ACL='public-read')



    else:
        continue
以编程方式,您必须提供文件夹路径,该路径在本例中硬编码为directory\u in_str变量。然后,此代码将迭代搜索图像的每个文件,然后它将要求输入自定义名称,然后它将上载您的文件

此外,您希望在您的网站上显示这些图像,因此已使用ACL打开图像的公共读取,因此您可以直接使用s3链接在您的网页中嵌入图像,如下图所示


上述文件是我用来测试此代码段的文件。您的图像将如下所示可用。请确保更改bucket name.:)

检查此答案@HassanAbbas谢谢您的回复。因为我将通过表单上传图像。您对此有何建议?请澄清您的问题?您是否询问如何上传im年龄(如代码所示),或如何下载图像(“如何从该文件夹中获取图像”)?您尝试过什么,遇到了什么问题?@JohnRotenstein先生问题更新您是说
image01.jpeg
实际上位于您本地计算机上的
/upload/image01.jpeg
,您想将其上传到亚马逊S3存储桶中的
index/image01.jpeg
?感谢john现在在rosourse met的回复这个for循环如何知道它的“我的图像”位于该位置?
Filename='/upload/'+image[0]
告诉它在
/upload/
中查找本地文件。哦,好的,谢谢。所以我需要上传图像的数据。真的谢谢你。我有一个django网站,我将从那里上传图像。上传后会自动上传到S3Ok,这很有意义。我也与django合作。我建议你看看s3 django包(有很多)除非你有什么理由不能使用它们。这里有一些你可以看的:这是:我想要你从我的问题中得到的。所以如果我将图像路径发送到s3和名称。这些图像将上传到s3并可以显示在那里?或者只显示图像路径,第二件事是我应该把代码放在哪里,然后按如下方式执行我希望在我以表单形式提交图片时运行此操作。您必须提供您的图像位于目录中的文件夹路径和s3 bucketname,其余所有操作将使用我的代码自动完成,一个接一个原始图像名称将显示给您,然后在输入自定义名称后,您将被要求输入自定义名称e,你的图像将被上传,然后轮到下一个图像,这将一直持续到你文件夹中的最后一个图像被上传到你的s3存储桶中,所有图像将显示你在上传时提供给它们的名称。第二个疑问,这是一个服务器端脚本,将在你的django服务器上运行。我没有django的经验,所以我无法帮助你如何做到这一点