寻找更完整的YouTube视频上传说明
可能重复的问题:
访问用户上传的视频时遇到问题
我在这个问题上尝试过这里和这里,但可能我问得太具体或者方向不对。
简单来说,我想把用户通过 <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 个回答
你现在遇到的问题是,你的文件还没有保存到磁盘上,那它怎么会有路径呢?
有两个明显的解决办法。首先,你可以把你的 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
,如果需要的话,你可以重定向它。