Django快速删除文件

时间:2016-06-18 11:52:26

标签: django django-views

我的小项目有问题。基本上,我的网站将拥有用户帐户,每个帐户都允许将图像上传到服务器(比如画廊)。显然我不希望所有图像都出现在一个文件夹中,因此我实现了它,以便每个用户的图像只会到达各自的目录。

问题是,虽然用户可以上传,但我不知道怎么做,所以他们可以删除这些文件。

表“ImageDoc”有一列“imgfile”,用于存储文件名。

view.py

import java.util.HashMap;

import java.util.Scanner;

public class Letters {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("Enter The Sentense");
        String s = in.nextLine();
        HashMap<Character,Integer> w = new HashMap<Character,Integer>();
        for(int i=0; i < s.length(); i++){
            w.put(s.charAt(i), w.get(s.charAt(i))==null?1:(w.get(s.charAt(i))+1));
        }
        for(char i:w.keySet()){
            System.out.println(i+":"+w.get(i));
        }
    }
}

代码在上面工作,它保存到用户的相应目录。然而...

view.py

def image_galleria(request):
    LOCATION = request.user.username + "/"

    if request.method == 'POST':
        form = ImgDocForm(request.POST, request.FILES)

        if form.is_valid():
            origin_form = form.cleaned_data["user_file"]
            origin_name = origin_form.name
            new_name = origin_name.split('.')[0] + ".jpg"
            original_file = os.path.join(settings.MEDIA_ROOT+LOCATION, new_name)

            original_name = ImageDoc(user_id=user_details.id, imgfile=new_name)
            original_name.save()

我尝试了“.delete()”的各种组合,但这不起作用。知道我做错了吗?

2 个答案:

答案 0 :(得分:0)

如果要删除文件,只需获取file对象并将其删除...在您的情况下应该

imagex.delete()

答案 1 :(得分:0)

我想我是通过另一种方法解决的。供将来参考:

views.py

@login_required(login_url='sign_in')
def delete_image(request, image_id):
    imagex = ImageDoc.objects.get(id=image_id)

    imgfile = settings.MEDIA_ROOT + request.user.username + "/" + imagex.imgfile.name
    os.remove(imgfile)

    imagex.imgfile.delete()
    imagex.delete()

    return HttpResponseRedirect(reverse('image_galleria'))

相当粗略的解决方案,但我认为它有效。谢谢!