2011-06-22 4 views
1

データベースを使ってファイルを偽のディレクトリ構造にアップロードしました。私は、親のパス&のフィールドにファイル名&を持っています。私のコントローラを使って設定したファイル(ファイルは "アップロード"タイプです)です。ファイルが正常にアップロードディレクトリに保存されていることがわかります。ただ、参考のために私は、ユーザーがアプリ/コントローラ/機能/ myfilesという/ image.jpgのようなものを使用してファイルをダウンロードすることができますので、同様のファイルをダウンロードするための機能を設定しようとしていますアップロードディレクトリ内のファイルをweb2pyで返す - 文字列の問題

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

を使用してファイルを保存します。私はこのコードを使用してファイルを検索する:データベース内のファイル名である

allfiles.file.89fe64038f1de7be.6d6f6e6b65792d372e6a7067.jpg 

:私はfile.fileが、私はのような文字列だったJPGファイルを取得したファイルを返す試みた

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

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

が、私はこのパスを取得しています:私は、これは文字列の特殊なタイプであるか、多分正確に文字列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 

私はこのコードを試してみました。私の機能を通してファイルをユーザーに返すことができるものはありますか?

答えて

4

ほとんど正しいです。試してみてください:

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

Python文字列はシーケンスタイプなので、繰り返し可能です。 joinメソッドの引数として単一の文字列を送信すると、その文字列の各文字が繰り返し処理されます。したがって、たとえば:また

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

、自動的にOS(すなわち、os.path.sep)、スラッシュを挿入するので、不要のため、適切なパス区切り文字によってその引数を分離することos.path.joinに注意してください手動で

関連する問題