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
Amazon s3 无法从Amazon S3中的文件中获取mp3标签_Amazon S3_Boto - Fatal编程技术网

Amazon s3 无法从Amazon S3中的文件中获取mp3标签

Amazon s3 无法从Amazon S3中的文件中获取mp3标签,amazon-s3,boto,Amazon S3,Boto,我正在尝试使用Boto从存储在AmazonS3中的文件中获取mp3标签。 这是我的剧本: import boto from boto.s3.connection import S3Connection import eyeD3 def main(): conn = S3Connection('______', '_________') myBucket = conn.get_bucket('bucketName') for key in skempi.list(): if eyeD3

我正在尝试使用Boto从存储在AmazonS3中的文件中获取mp3标签。 这是我的剧本:

import boto
from boto.s3.connection import S3Connection
import eyeD3

def main():
conn = S3Connection('______', '_________')
myBucket = conn.get_bucket('bucketName')

for key in skempi.list():
    if eyeD3.isMp3File(key.name):
        audio = eyeD3.Mp3AudioFile(key.name)

if __name__ == '__main__':
    main()
但是,我可以列出我的bucket中的所有文件等等。我得到的错误是

IOError: [Errno 2] No such file or directory: u'ulver/01 Track 1.mp3'

我的代码有问题吗?

您正在将key.name传递给eyeD3函数,但我认为您需要一个类似文件的对象来调用eyeD3.Mp3AudioFile。我没有使用eyeD3,而且它似乎不想通过pip安装,所以我无法尝试此方法,但类似的方法应该可以工作:

for key in skempi.list():
    if eyeD3.isMp3File(key.name):
        audio = eyeD3.Mp3AudioFile(key)

您正在将key.name传递给eyeD3函数,但我认为您需要一个类似文件的对象来调用eyeD3.Mp3AudioFile。我没有使用eyeD3,而且它似乎不想通过pip安装,所以我无法尝试此方法,但类似的方法应该可以工作:

for key in skempi.list():
    if eyeD3.isMp3File(key.name):
        audio = eyeD3.Mp3AudioFile(key)

如果不从S3下载标签,就无法从文件中获取标签


你可以考虑使用EC2来处理文件,但是你仍然要下载文件来读取标签。

< P>无法从文件中获取标签<强>没有< /强>从S3下载它们。

你可以考虑使用EC2来处理文件,但是你仍然要下载文件来读取标签。

< P>我必须编写一个脚本,该脚本是我本地驱动器中的MP3文件的元数据,将歌曲上传到Amazon S3(使用BOTO API),并将特权设置为“公共”,生成URL,然后将URL和金属数据存储到MySQL数据库中。因此,为了防止一些人遇到同样的问题,这解决了我的问题,因为我现在不需要上传歌曲,然后运行数据库更新。

我必须编写一个脚本,将mp3文件的元数据从本地驱动器上传到Amazon S3(使用Boto API),并将权限设置为“public”,生成一个URL,然后将URL和金属数据存储到MySQL数据库中。为了防止一些人遇到同样的问题,这解决了我的问题,因为我现在不需要上传歌曲,然后为我的数据库运行更新。

不,它不起作用,因为它需要参数中的字符串。我的问题是我无法获取bucket中每个文件的路径。如果它需要一个字符串,那么它必须期望该字符串是本地文件的路径。在这种情况下,唯一的选择是将文件从S3复制到本地文件系统(使用key.get_contents_to_filename),然后将本地文件的路径传递到Mp3AudioFile类。我需要获取这些文件的路径+mp3元数据,将其存储在Django应用程序的MySQL数据库中,所以以后我可以在我的网站上播放它们。是否有其他库(eyeD3除外)允许我从非本地文件读取标记?对不起,我没有。如果您想要存储在S3中的MP3文件的完整URL,可以调用key.generate_URL(1,query_auth=False,force_http=True)为每个键生成。这将为您提供一个指向S3中对象的URL。希望有帮助。这意味着这些文件不是公开可读的。你想让他们成为这样吗?或者,您是否打算仅通过应用程序访问这些内容?您可以创建在一段时间内过期的已签名URL。例如,key.generate_url(60,force_http=True)将生成一个签名url,该url将在60秒内过期(即变得不可用)。我真的不知道你的应用程序是什么,所以我不确定该建议什么。不,它不起作用,因为它需要参数中的字符串。我的问题是我无法获取bucket中每个文件的路径。如果它需要一个字符串,那么它必须期望该字符串是本地文件的路径。在这种情况下,唯一的选择是将文件从S3复制到本地文件系统(使用key.get_contents_to_filename),然后将本地文件的路径传递到Mp3AudioFile类。我需要获取这些文件的路径+mp3元数据,将其存储在Django应用程序的MySQL数据库中,所以以后我可以在我的网站上播放它们。是否有其他库(eyeD3除外)允许我从非本地文件读取标记?对不起,我没有。如果您想要存储在S3中的MP3文件的完整URL,可以调用key.generate_URL(1,query_auth=False,force_http=True)为每个键生成。这将为您提供一个指向S3中对象的URL。希望有帮助。这意味着这些文件不是公开可读的。你想让他们成为这样吗?或者,您是否打算仅通过应用程序访问这些内容?您可以创建在一段时间内过期的已签名URL。例如,key.generate_url(60,force_http=True)将生成一个签名url,该url将在60秒内过期(即变得不可用)。我真的不知道你的应用程序是什么,所以我不确定该建议什么。我将从Django管理面板运行更新(从AS3中的mp3文件提取元数据,并将数据上载到MySQL数据库)。所以我应该暂时将文件下载到我的服务器中,然后从中获取元数据?@MohamedTurki-这是一次性任务吗?如果是,那么我会用你喜欢的任何语言编写一个完全独立的脚本来编制索引?我不想将这些文件下载到我的web服务器上,即使是暂时的。emm,我不确定我会多久下载一次,可能是三个月一次。问题是,我需要从不同的来源填充数据库,AS3获取每个mp3文件的url,从本地驱动器获取相同mp3文件的元标记。也许我没有给予这个任务应有的重视,因为我认为它不会这么复杂,也许我应该编写一个脚本,同时上传文件和提取金属数据?这可行吗?@MohamedTurki我绝对会在上传过程中“索引”文件。如果您还没有牢牢掌握S3存储桶中的内容,那么使用大量文件管理S3存储桶可能会有点困难。这应该很容易实现。上传到您的服务器,提取标签并添加到数据库以及任何其他有关文件的信息(包括S3位置的详细信息,例如bucket)