Ejemplo n.º 1
0
class ProductFile(models.Model):
    product = models.ForeignKey(Product)
    name = models.CharField(max_length=120, null=True, blank=True)
    file = models.FileField(
        upload_to=upload_product_file_loc,
        storage=ProtectedS3Storage(
        ),  #FileSystemStorage(location=settings.PROTECTED_ROOT)
    )
    #filepath        = models.TextField() # '/protected/path/to/the/file/myfile.mp3'
    free = models.BooleanField(default=False)  # purchase required
    user_required = models.BooleanField(default=False)  # user doesn't matter

    def __str__(self):
        return str(self.file.name)

    @property
    def display_name(self):
        og_name = get_filename(self.file.name)
        if self.name:
            return self.name
        return og_name

    def get_default_url(self):
        return self.product.get_absolute_url()

    def generate_download_url(self):
        bucket = getattr(settings, 'AWS_STORAGE_BUCKET_NAME')
        region = getattr(settings, 'S3DIRECT_REGION')
        access_key = getattr(settings, 'AWS_ACCESS_KEY_ID')
        secret_key = getattr(settings, 'AWS_SECRET_ACCESS_KEY')
        if not secret_key or not access_key or not bucket or not region:
            return "/product-not-found/"
        PROTECTED_DIR_NAME = getattr(settings, 'PROTECTED_DIR_NAME',
                                     'protected')
        path = "{base}/{file_path}".format(base=PROTECTED_DIR_NAME,
                                           file_path=str(self.file))
        aws_dl_object = AWSDownload(access_key, secret_key, bucket, region)
        file_url = aws_dl_object.generate_url(path,
                                              new_filename=self.display_name)
        return file_url

    def get_download_url(self):  # detail view
        return reverse("products:download",
                       kwargs={
                           "slug": self.product.slug,
                           "pk": self.pk
                       })
Ejemplo n.º 2
0
class ProductFile(models.Model):
    product = models.ForeignKey(Product)
    name = models.CharField(max_length=120, null=True, blank=True)
    file = models.FileField(
        upload_to=upload_product_file_location,
        storage=ProtectedS3Storage(
        )  # FileSystemStorage(location=settings.PROTECTED_ROOT) <- for local
    )
    free = models.BooleanField(default=False)  # purchase required
    user_required = models.BooleanField(default=False)  # user doesn`t matter

    def __str__(self):
        return str(self.file.name)

    @property
    def display_name(self):
        original_name = get_filename(self.file.name)
        if self.name:
            return self.name
        return original_name

    def get_default_url(self):
        return self.product.get_absolute_url()

    def generate_download_url(self):
        bucket = getattr(settings, 'AWS_STORAGE_BUCKET_NAME')
        region = getattr(settings, 'S3DIRECT_REGION')
        access_key = getattr(settings, 'AWS_ACCESS_KEY_ID')
        secret_key = getattr(settings, 'AWS_SECRET_ACCESS_KEY')
        if not access_key or not secret_key or not bucket or not region:
            return '/product_not_found/'
        protected_dir_name = getattr(settings, 'PROTECTED_DIR_NAME',
                                     'protected')
        path = f'{protected_dir_name}/{str(self.file)}'  # works for any path inside bucket
        aws_dl_object = AWSDownload(access_key, secret_key, bucket, region)
        file_url = aws_dl_object.generate_url(path,
                                              new_filename=self.display_name)
        return file_url

    def get_download_url(self):
        return reverse('products:download',
                       kwargs={
                           'slug': self.product.slug,
                           'pk': self.pk
                       })