Проблема с доступом к загруженному пользователем видео во временной памяти - PullRequest
1 голос
/ 02 августа 2011

Я пытаюсь отправить загруженное пользователем видео на 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()

Так что я бы предположил, что проблема в том, что мне нужно предоставить более полный путь к видео. Если это так, то каков путь доступа к видео во временной памяти.

Общая форма команды: youtube-upload --email=email --password=password --title=title --description=description --category=category video.avi

В качестве альтернативы я рассмотрел API-интерфейс youtube здесь , но если бы кто-нибудь мог предоставить более полное объяснение того, как сделать это в python, используя API, это было бы удивительно. К сожалению, руководство на сайте просто фокусируется на 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' object has no attribute 'temporary_file_path'. Так что видео все еще находится во временной памяти, и я не знаю, какой объект temporary_file_path предполагается вызвать или как получить указанный объект.

1 Ответ

3 голосов
/ 02 августа 2011

Фактически Django сохраняет файлы в памяти, но большие файлы сохраняются в пути.
Размер «большого файла» можно определить в настройках с помощью FILE_UPLOAD_MAX_MEMORY_SIZE
и
FILE_UPLOAD_HANDLERS по умолчанию:

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

И это дает нам 2 возможности:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...