在django-storage和S3

时间:2017-09-21 12:33:28

标签: python django amazon-s3

我正在使用django与django-storages和S3来管理一些上传的文件。这些文件可以上传到"功能"文件夹,例如:

/上传/产品/ PRODUCT_CODE / 特征 / 文件名 .PDF

我希望将文件移出此功能文件夹,删除原始文件(最后在处理完所有文件后最终包含文件夹),以便在以下位置找到它们:

/上传/产品/ PRODUCT_CODE / 文件名 .PDF

我目前有以下代码来执行此操作:

def move_files_in_folders(path, folder):
    files = default_storage.listdir(path+"/"+folder)
    returnable_file_list = list()

    for filename in files[1]:
        if filename is not '':

            movable_file = default_storage.open(path+'/'+folder+'/'+filename)
            default_storage.save(path+'/'+filename, movable_file)
            default_storage.delete(path+'/'+folder+'/'+filename)
            returnable_file_list.append(filename)

    default_storage.delete(path + '/' + folder)
    return returnable_file_list

这有效,但是文件列表很长,因为系统必须打开每个文件并重新保存。

有没有办法可以重构此代码以避免昂贵的打开和保存调用?

1 个答案:

答案 0 :(得分:1)

您可以继承S3Boto3Storage类并添加将文件从from_path复制到to_path的方法

$request = $this->getRequest();
$vars = $request->requestVars();

//Create submission object
$submission = new Submission();     
$vars->saveInto($submission);
$submission->write();

之后,您可以使用from和to路径创建MyS3Storage对象并调用复制文件。