2017-08-31 152 views
-1

我一直在尋找很多類似的問題,都在Google和StackOverflow上,但似乎沒有一個滿意的解決方案適用於我。將文件寫入Django服務器上的動態路徑

我的情況是這樣的 -

我使用jQuery File Upload以下步驟here

我想要保存文件的位置是動態的,它取決於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」的文件,而是我有一個名爲「源文件」文件沒有目錄內的延伸。

當我改變了open()函數內部的路徑

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

我有一個名爲「源Filesnormal.csv」文件。

然後我試圖改變save_pathfolder_path + '\\Source Files\\',並在save_path+file.name傳遞給open(),但隨後又說No such file or directory

我很困惑如何進入該文件夾位置並寫入文件。

這裏我不能使用MEDIA_URL,因爲它取決於usernamesession_key

+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