Загрузка python - где находятся tmp/FILES?

Я использую Python 2.4 из cgi и пытаюсь загрузить его в облачный сервис, используя API Python. В php массив $_FILE содержит элемент "tmp", в котором находится файл, пока вы не разместите его там, где хотите. Что эквивалентно в Python?

если я сделаю это

fileitem = form['file']

fileitem.filename это имя файла

если я печатаю fileitem, массив просто содержит имя файла и то, что выглядит как сам файл.

Я пытаюсь потоковое вещание, и это требует местоположения TMP при использовании PHP API.

2 ответа

Решение

Файл является реальным файлом, но cgi.FieldStorage отмените связь с ним, как только он будет создан, так что он будет существовать только до тех пор, пока вы его оставите открытым, и у него больше не будет реального пути в файловой системе.

Вы можете, однако, изменить это...

Вы можете продлить cgi.FieldStorage и заменить make_file способ разместить файл где вы хотите:

import os
import cgi

class MyFieldStorage(cgi.FieldStorage):
    def make_file(self, binary=None):
        return open(os.path.join('/tmp', self.filename), 'wb')

Вы также должны иметь в виду, что FieldStorage объект создает реальный файл только в том случае, если он получает более 1000B (в противном случае это cStringIO.StringIO)

РЕДАКТИРОВАТЬ: cgi Модуль на самом деле делает файл с tempfile модуль, так что проверьте это, если вы хотите много подробностей.

Вот фрагмент кода, взятый с моего сайта:

h = open("user_uploaded_file", "wb")
while 1:
    data = form["file"].file.read(4096)
    if not data:
        break
    h.write(data)
h.close()

Надеюсь это поможет.

Другие вопросы по тегам