寻找更完整的YouTube视频上传说明

0 投票
1 回答
1370 浏览
提问于 2025-04-16 22:46

可能重复的问题:
访问用户上传的视频时遇到问题

我在这个问题上尝试过这里这里,但可能我问得太具体或者方向不对。

简单来说,我想把用户通过 <form> <input type='file'/> </form> 提交的视频上传到 YouTube。

我看过YouTube 直接上传,但设置起来非常麻烦,而且并没有提供我想要的功能。我也研究过 YouTube 数据 API,但正如之前的问题所说,文档在 Python 实现方面的具体说明有点不足。

如果有人能帮我一步步讲解,或者指引我找到一个好的教程,我将非常感激。

我之前的问题大致概述了我目前的尝试,下面是快速参考:

html:

<form method='post' action='/new/' enctype="multi-part/form-data">{% csrf_token %}
<input type='file' name='file' id='file'/>
<input type='submit' />
</form> 

django 视图(youtube-upload 是一个使用 YouTube 数据 API 上传文件到 YouTube 的 Python 模块):

 def upload_video(request):
     if request.method == 'POST':
         video = request.FILE['file']
         v = video.temporary_file_path
         command = 'youtube-upload --email=email@gmail.com --password=password --title=title --description=description --category=Sports ' + v   

         r=subprocess.Popen(command, stdout=subprocess.PIPE)

         vid = r.stdout.read()
     else:
         form = VideoForm()
         request.upload_handlers.pop(0)
     return render_to_response('create_check.html', RequestContext(request, locals() ) )

目前 v=video.temporary_file_path 报错 'InMemoryUploadedFile' object has no attribute 'temporary_file_path'

谢谢你的帮助。

1 个回答

0

你现在遇到的问题是,你的文件还没有保存到磁盘上,那它怎么会有路径呢?

有两个明显的解决办法。首先,你可以把你的 FILE_UPLOAD_HANDLERS 设置 改成只用一个处理器,像这样:

("django.core.files.uploadhandler.TemporaryFileUploadHandler",)

这样的话,所有文件就会自动保存到磁盘上。

第二种方法是你可以手动保存文件,方法是:

with open('some/file/name', 'wb+') as destination:
    for chunk in video.chunks():
        destination.write(chunk)

然后在调用 youtube_upload.main_upload 的时候,把 some/file/name 作为参数传进去。

如果你看过Django文档,它会回答你前两个问题,并指引你找到答案,你就会知道这些了。

Youtube上传的源代码 清楚地说明它是可以被导入的。只需在你的路径中 import youtube_upload,然后用 youtube_upload.main_upload(arguments, output) 来调用它,其中 arguments 是:

['--email=email@gmail.com', '--password=password', '--title=title', '--description=description', '--category=Sports', 'path/to/file']

选项 output 默认是 sys.stdout,如果需要的话,你可以重定向它。

撰写回答