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



我试图提交用户上传视频到youtube使用html输入类型file和python模块youtube-upload。当表单被提交时,它被这样处理:

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()

所以我认为问题是我需要为视频提供一个更完整的路径。如果是这种情况,访问临时存储器中的视频的路径是什么?

该命令的通用for为:youtube-upload --email=email --password=password --title=title --description=description --category=category video.avi

或者,我在这里专门研究了youtube的api,但如果有人能提供一个更完整的解释,说明如何在python中使用api来实现这一点,那将是惊人的。不幸的是,站点上的指南只关注xml。

编辑sacabuche's COMMENT:

所以我的视图现在大致是:

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'。所以视频仍然在临时内存中我不知道应该调用什么对象temporary_file_path或者如何获得该对象

实际上django将文件保存在内存中,但是大文件保存在一个路径中。
大文件的大小可以使用FILE_UPLOAD_MAX_MEMORY_SIZE
在设置中定义和
默认的FILE_UPLOAD_HANDLERS是:

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

这给了我们两种可能:

<标题> 1。删除内存处理程序

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

<标题> 2。动态修改处理程序

文档在这里

#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

最新更新