Возврат файла в каталоге загрузки с web2py - проблема с строками - PullRequest
1 голос
/ 22 июня 2011

У меня есть пользователи, загружающие файлы в поддельную структуру каталогов с использованием базы данных.У меня есть поля для родительского пути, имени файла и файла (файл типа «загрузить»), которые я установил с помощью моего контроллера.Я вижу, что файлы правильно хранятся в каталоге загрузки, чтобы он работал.Просто для справки, я храню файлы, используя

db.allfiles.insert(filename=filename, \
    parentpath=parentpath, \
    file=db.allfiles.file.store(file.file,filename), \
    datecreated=now,user=me)

Я пытаюсь настроить функцию для загрузки файлов, чтобы пользователь мог загружать файлы, используя что-то вроде app / controller / function / myfiles / image.jpg,Я нахожу файл, используя этот код:

file=db((db.allfiles.parentpath==parentpath)&\
        (db.allfiles.filename==filename)&\
        (db.allfiles.user==me)).select()[0]

a Я попытался возвратить file.file, но файлы, которые я получал, были jpg файлы, которые были в виде строк:в базе данных.Я попробовал этот код:

os.path.join(request.folder,('uploads/'),'/'.join(file.file))

но я получаю этот путь:

/home/charles/web2py/applications/chips/uploads/a/l/l/f/i/l/e/s/./f/i/l/e/./8/9/f/e/6/4/0/3/8/f/1/d/e/7/b/e/./6/d/6/f/6/e/6/b/6/5/7/9/2/d/3/7/2/e/6/a/7/0/6/7/./j/p/g

Я думаю, что это специальный тип строки или, возможно, file.file не совсем строка,Могу ли я вернуть файл пользователю через мою функцию?

Ответы [ 2 ]

4 голосов
/ 22 июня 2011

Ты почти прав.Попробуйте:

os.path.join(request.folder,'uploads',file.file)
1 голос
/ 22 июня 2011

Строки Python являются типами последовательностей и поэтому могут быть повторяемыми.Когда вы передаете одну строку в качестве аргумента методу объединения, он выполняет итерацию по каждому символу в строке.Так, например:

>>> '/'.join('hello')
'h/e/l/l/o'

Также обратите внимание, что os.path.join автоматически разделит свои аргументы соответствующим разделителем пути для вашей ОС (то есть os.path.sep), поэтому нет необходимостивставить косую черту вручную.

...