可能重复:
Problem accessing user uploaded video in temporary memory
所以我尝试过这个问题here和here,但在我的问题中,我可能过于具体或误导了。
基本上我正在尝试通过<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'
。
感谢您的帮助。
答案 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
,您可以根据需要重定向。