Я могу загружать видео на YouTube через мое приложение Django, но только тогда, когда они загружены с моего ноутбука. YouTube выдает мне сообщение «Обработка прекращена», когда я загружаю то же видео через iPhone.
Я использую Ubuntu 16.04.3 с Django версии 1.11.20 и Python 2.7. Я использую функцию в своих представлениях для получения загруженного файла и, если он превышает 2,5 мегабайта, извлекает файл из каталога / tmp, а если он меньше 2,5 мегабайт, обрабатывает файл из памяти.
Это работает, когда я загружаю видеофайлы со своего ноутбука, но не получается, когда я загружаю видеофайлы со своего iPhone.
Для ясности, я не получаю ошибок от Django / Python. Файл, кажется, загружает, обрабатывает и удаляет просто отлично. Но после того, как YouTube получает его, я захожу в свою студию YouTube и выдает ошибку «Обработка прекращена. Это видео не может быть обработано».
def upload_to_youtube(request):
if request.method == 'POST' and request.FILES['video']:
video_file = request.FILES['video']
if video_file.size >= 2621440:
fname = request.FILES['video'].file.name
storage = DjangoORMStorage(CredentialsModel, 'id', request.user.id, 'credential')
credentials = storage.get()
client = build('youtube', 'v3', credentials=credentials)
body = {...}
with tempfile.NamedTemporaryFile('wb', suffix='yt-django') as tmpfile:
with open(fname, 'rb') as fileobj:
tmpfile.write(fileobj.read())
insert_request = client.videos().insert(
part=','.join(body.keys()),
body=body,
media_body=MediaFileUpload(
tmpfile.name, chunksize=-1, resumable=True)
)
insert_request.execute()
else:
storage = DjangoORMStorage(CredentialsModel, 'id', request.user.id, 'credential')
credentials = storage.get()
client = build('youtube', 'v3', credentials=credentials)
body = {...}
with tempfile.NamedTemporaryFile('wb', suffix='yt-django') as tmpfile:
tmpfile.write(request.FILES['video'].read())
insert_request = client.videos().insert(
part=','.join(body.keys()),
body=body,
media_body=MediaFileUpload(
tmpfile.name, chunksize=-1, resumable=True)
)
insert_request.execute()
Первоначально думая, что это связано с размером файла, я написал в чеке, чтобы обрабатывать файл по-другому, если он был 2,5 МБ или меньше, вместо этого обрабатывать его из памяти. Тем не менее, даже если файл размером менее 2,5 Мб будет отправлен с ноутбука, он все равно будет загружен. Я не уверен, есть ли что-то в моем коде Django / Python, что проблематично для загрузки iOS, или это на YouTube.