2017-08-31 24 views
-1

GoogleとStackOverflowの両方で多くの同様の質問がありましたが、満足できる解決策ではありません。私は手順herejQuery File Uploadを使用していますDjangoのサーバー上の動的パスにファイルを書き込む

- この

私の状況です。

ファイルを保存する場所は動的で、usernamesession_keyに依存します。

これは、ファイルを書き込むための機能です -

def handle_uploaded_file(file, session_key, username): 
    folder_path = os.path.dirname(os.path.realpath(__file__)) + '\\Source\\' + username + '\\session_id_' + session_key 
    if not os.path.exists(folder_path): 
     os.makedirs(folder_path) 
    save_path = folder_path + '\\Source Files' 
    with open(save_path, 'wb+') as destination: 
     for chunk in file.chunks(): 
      destination.write(chunk) 

私は「normal.csv」という名前のファイルをアップロードしようとしたが、代わりに私は、ディレクトリ内の拡張子なしの「ソースファイル」という名前のファイルを持って。私は

with open(save_path+file.name, 'wb+') as destination 

open()関数内でパスを変更し

私は「ソースFilesnormal.csv」という名前のファイルを得ました。

私はその後folder_path + '\\Source Files\\'save_pathを変更しようとしました、そしてopen()save_path+file.nameに渡されますが、それはNo such file or directory言いました。

私はそのフォルダの場所に入り、ファイルを書き込む方法について非常に混乱しています。

usernamesession_keyに依存するため、ここではMEDIA_URLを使用できません。

+0

宛先パスを取得するために 'os.path.join'を使用してください。文字列の連結は、その目的のための良い方法ではありません。 – ohannes

答えて

1

アップロードしたファイル名をコピー先パスに指定していません。

それはそのようなものでなければなりません:

save_path = os.path.join(folder_path, 'Source Files', file.name) 

あなたはあなたにこのようなパス与える:\ソースファイル\は、

をyour_uploaded_file_nameしかし...

をこのパス内のディレクトリの存在を確認する必要があることに注意してください。だから、os.path.existsのチェック 'ソースファイル'は良いでしょう。

source_files_path = os.path.join(folder_path, 'Source Files') 

if not os.path.exists(source_files_path): 
    os.mkdirs(source_files_path) 

save_path = os.path.join(source_files_path, file.name) 
+0

はい、ありがとうございます。どのように私の愚かな。私はネストされたディレクトリをチェックすることを完全に忘れていました。 –

+0

あなたは知っています、それは起こります。それはうれしかったです。 – ohannes

関連する問題