Как получить путь к файлу для загруженного файла?

У меня проблемы с передачей пути к файлу в библиотеку Textract.

def file_to_string(filepath):
    text = textract.process(filepath)
    print text
    return text

Вот моя форма загрузки в views.py

if request.method == 'POST':
    upload_form = UploadFileForm(request.POST, request.FILES)
    if upload_form.is_valid():  
        file = request.FILES['file']
        filetosave = File(file=file, filename=file.name)
        filetosave.save()
        if validate_file_extension(file):
            request.session['text'] = file_to_string(file) # something in here
else:
    upload_form=UploadFileForm()

models.py

class File(models.Model):
    filename = models.CharField(max_length=200)
    file = models.FileField(upload_to='files/%Y/%m/%d')
    upload_date=models.DateTimeField(auto_now_add =True)
    status = models.CharField(max_length=200)

    def __unicode__(self):
        return self.filename

Теперь Textract ожидает путь в file_to_string(filepath), Если я пытаюсь передать объект файла, это дает мне ошибку: "coercing to Unicode: need string or buffer, InMemoryUploadedFile found",

Но если это тип InMemoryUploadedFile, как мне получить путь? Я понимаю, что это хранится в памяти и не имеет пути.

Как мне справиться с этим - сначала сохранить объект файла, а затем попытаться получить к нему доступ? Если я сохраню файл, а затем попробую request.session['text'] = file_to_string(file.name) это дает MissingFileError, хотя в документах сказано, что это должно дать имя файла, включая относительный путь от MEDIA_ROOT.

Заранее большое спасибо.

2 ответа

Решение

request.session['text'] = file_to_string(filetosave.file.path) должен сделать трюк

Попробуйте использовать file_to_string(file.name),

Документы: https://docs.djangoproject.com/en/1.10/ref/models/fields/

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