загрузка на python - где находятся tmp / FILES? - PullRequest
0 голосов
/ 18 февраля 2009

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

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

fileitem = form['file']

fileitem.filename - имя файла

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

Я пытаюсь транслировать вещи, и для использования php api требуется местоположение tmp.

Ответы [ 2 ]

2 голосов
/ 18 февраля 2009

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

Однако вы можете изменить это ...

Вы можете расширить 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, так что проверьте, хотите ли вы много неприятных подробностей.

1 голос
/ 18 февраля 2009

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

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

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

...