正在寻找有关如何将视频上传到YouTube的更完整说明

时间:2011-08-03 02:58:43

标签: python html django file-upload youtube

  

可能重复:
  Problem accessing user uploaded video in temporary memory

所以我尝试过这个问题herehere,但在我的问题中,我可能过于具体或误导了。

基本上我正在尝试通过<form> <input type='file'/> </form>提交视频并将其提交给youtube。

我看过youtube direct,但这是设置的噩梦,并没有真正提供我正在寻找的功能。我已经查看了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是一个python模块,它使用youtube数据api使用指定的信息将文件上传到youtube):

 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 draws错误'InMemoryUploadedFile' object has no attribute 'temporary_file_path'

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您当前的问题是您的文件尚未保存到磁盘,那么它怎么会有路径?

有两个明显的解决方案。首先,您可以将FILE_UPLOAD_HANDLERS setting更改为只有一个处理程序,如下所示:

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

所以它会自动将所有文件保存到磁盘。

其次,您可以通过执行

手动保存文件
with open('some/file/name', 'wb+') as destination:
    for chunk in video.chunks():
        destination.write(chunk)

然后只需将参数some/file/name传递给youtube_upload.main_upload

如果您阅读了Django文档,这回答了前两个问题中 指向您的内容,那么您就会知道这一点。

source of Youtube Upload表明它肯定可以导入。只需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,您可以根据需要重定向。