python-在临时存储器中访问用户上传的视频时出现问题

我正在尝试使用html输入类型文件和python模块youtube-upload将用户上传的视频提交给youtube.提交表单后,其处理方式如下:

if request.method == 'POST':
    video = request.FILES['file']

    v=str(video)

    command = 'youtube-upload --email=email@gmail.com --password=password --title=title --description=description --category=Sports ' + v

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

因此,我认为问题是我需要为视频提供更完整的路径.在这种情况下,访问临时存储器中视频的路径是什么.

该命令的通用名称是:
youtube-upload –email =电子邮件–password =密码–title =标题–description =描述–category =类别video.avi

另外,我已经看过youtube api,特别是here,但是如果有人能提供使用api在python中执行此操作的更完整说明,那将是惊人的.不幸的是,该站点上的指南仅关注xml.

根据sacabuche的评论进行编辑:

所以我的看法现在大致是:

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”对象没有属性“ temporary_file_path”.因此,视频仍在临时存储器中,我不知道应该调用哪个对象secondary_file_path或如何获取该对象.

解决方法:

实际上django将文件保存在内存中,但是大文件保存在路径中.
可以使用FILE_UPLOAD_MAX_MEMORY_SIZE在设置中定义“大文件”的大小

FILE_UPLOAD_HANDLERS默认为:

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

这给了我们2种可能性:

1.卸下内存处理程序

删除..MemoryFileUploadHandler,但是所有文件都将保存在临时文件中,这并不酷

2.即时修改处理程序

docs here

#views.py

def video_upload(request):
    # this removes the first handler (MemoryFile....)
    request.upload_handlers.pop(0)
    return _video_upload(request)

def _video_upload(request):
    ....

要获取文件路径,您只需要执行video.temporary_file_path

上一篇:php – 如何从YouTube API获取YouTube视频缩略图?


下一篇:PHP从iframe / object嵌入数组中提取youtube视频ID?