将文件写入Django

时间:2017-08-31 07:08:54

标签: python django io

我一直在Google和StackOverflow上查看过很多类似的问题,但似乎并不是一个对我有用的令人满意的解决方案。

我的情况是这样的 -

我按照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"的文件,但我得到了一个名为" Source Files"的文件。在目录中没有扩展名。

当我将open()函数内的路径更改为

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

我有一个名为' Source Filesnormal.csv'。

的文件

然后我尝试将save_path更改为folder_path + '\\Source Files\\',然后将save_path+file.name传递给open(),然后又说No such file or directory

我很困惑如何进入该文件夹位置并写入文件。

我在这里不能使用MEDIA_URL,因为它取决于usernamesession_key

1 个答案:

答案 0 :(得分:1)

您没有将上传的文件名提供给目标路径。

应该是这样的:

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

你会给你一条这样的道路:

  

... \ Source Files \ 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)