簡體   English   中英

django 將圖像保存在 zip

[英]django save image in zip

客戶端上傳 zip。

解壓后的圖片。

我想把圖片保存到指定位置。

但我的代碼無法保存到指定位置

怎么做?

模型.py

def get_upload_path(instance, filename):
    return f'register/{instance.owner.job_number}/{filename}'

class UserRegister(models.Model):
    owner = models.ForeignKey(UserProfile, on_delete=models.CASCADE)
    image = models.ImageField(upload_to=get_upload_path)

    class Meta:
        db_table = 'UserRegister'

意見

class AddsUser(View):
    def get(self, request):
        data = {
            'title': 'AddsUser'
        }
        return render(request, './User/adds_user.html', data)

    def post(self, request):
        job_number = request.POST.get('job_number')
        zip_file = request.FILES.get('zip')
        date = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        dir_name = uuid.uuid4().hex
        zip_dir_path = f'./temp_zip/{dir_name}'

       # Save zip.
        with open(f'{zip_dir_path}.zip', 'wb') as files: 
            for i in zip_file.chunks():
                files.write(i)
                files.flush()

        os.mkdir(zip_dir_path) # Create folder.
        os.system(f'unzip {zip_dir_path}.zip -d {zip_dir_path}') # unzip

        # Read all pictures in the folder.
        for image_name in os.listdir(zip_dir_path):
            image_path = f"{zip_dir_path}/{image_name}"
            user_profile = UserProfile.objects.create(job_number=job_number, date=date)
            user_register = UserRegister.objects.create(owner_id=user_profile.id,
                                                        image=image_path)
        return redirect(reverse('admin:adds_user'))

此方法不會將圖片存儲在我指定的位置。

現在數據庫:

./temp_zip/4b9811b0a3c5429cb320cec1357c1099/247688.jpg

我希望結果是:

f'register/{instance.owner.job_number}/{filename}'
register/123/247688.jpg'
user_register = UserRegister.objects.create(owner_id=user_profile.id,
                                            image=image_path)

改成

with open(image_path, 'rb') as image_file:
    user_register = UserRegister()
    user_register.owner_id = user_profile.id
    user_register.image.save(image_name, ContentFile(image_file.read()))

這會將圖像規范保存到get_upload_path

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM