使用Django将文件从临时文件夹移动到永久文件夹

时间:2014-01-08 01:23:48

标签: django django-models django-forms django-views

当用户将图像上传到网站时,会将其上传到MEDIA_ROOT中指定的位置。在我的例子中,它是一个临时文件夹(临时)MEDIA_ROOT = '/opt/myenv/temp'。我想在用户通过登录确认其身份后,将这些图片从/opt/myenv/temp转移到/opt/myenv/permanent

以下是我要遵循的步骤,我陷入了第2步,有人可以指导我:

1.将Django会话ID添加到图像名称,然后将其存储在'/opt/myenv/temp'

views.py

def store_data(request):
    thumbnail = request.FILES['myfile']
    file_name = thumbnail.name
    thumbnail.name = file_name + '_' + request.session.session_key
    u = user_info.objects.create(thumbnail=thumbnail)

models.py

class user_info(models.Model):
    thumbnail = models.FileField(upload_to=get_upload_file_name)
    objects = models.Manager()

    def __unicode__(self):
        return self.f_name 

def get_upload_file_name(instance,filename):
    return "temp/%s" % (filename)

2.用户登录后,我想将名称中具有相同会话ID的图像移动到新文件夹'opt/myenv/permanent',同时用user_name替换图像名称中的session_id

2 个答案:

答案 0 :(得分:0)

基于code written by @banerjs,托管将文件从一个文件夹移动到另一个文件夹。

views.py

from PIL import Image
from django.conf import settings

def store_data(request):
    thumbnail               = request.FILES['myfile']
    file_name               = thumbnail.name
    thumbnail.name          = file_name + '_' + request.session.session_key
    session_id              = request.session.session_key                       # Add session_id to the table
    request.session['s_id'] = session_id                                        # Store session_id in session
    u                       = user_info.objects.create(thumbnail=thumbnail, session_id=session_id)

def move_image(request):
    session_id          = request.session['s_id']
    image               = user_info.objects.get(session_id__exact=session_id)                 
    image_path          = settings.MEDIA_ROOT + str(image.thumbnail)                                     
    im                  = Image.open(settings.MEDIA_ROOT + str(image.thumbnail))                         
    newpath             = 'permanent/' + str(image.thumbnail).split('/', 1)[1]                    
    im.save(settings.MEDIA_ROOT + newpath)                                                          
    r                   = user_info_confirmed.objects.create(thumbnail=newpath)

models.py

class user_info(models.Model):
    thumbnail = models.FileField(upload_to="temp/")
    session_id = models.CharField(max_length =100, blank=True, null=True) 
    objects = models.Manager()

class user_info_confirmed(models.Model):
    thumbnail = models.FileField(upload_to="permanent/")
    objects = models.Manager()

答案 1 :(得分:-1)

@ server您必须将权限“a + RW”授予 / opt / myenv / temp / opt / myenv / permanent 。然后按照以下链接。

http://docs.nullpobug.com/django/trunk/django.core.files.move-module.html