首页 > 解决方案 > 无法从 django 管理面板上传大文件

问题描述

我有一个 Django 应用程序。我想从这个应用程序的管理面板上传文件。文件上传后,将上传到谷歌云存储并从应用程序中删除。我收到 DATA_UPLOAD_MAX_MEMORY_SIZE 错误,因为我的文件大小约为 1GB。你能帮助我吗?

模型.py:

class Document(AbstractBasicFTPSupportModel):
category = models.ForeignKey(
    to="SupportCategory", related_name="documents", on_delete=models.CASCADE, verbose_name=_("category"),
)
related_products = models.ManyToManyField(
    "product.Product", blank=True, related_name="documents", verbose_name=_("related products")
)
document_file = models.FileField(
    upload_to=save_support_file, verbose_name=_("document file"), null=True, blank=True, max_length=255,
)

class Meta:
    verbose_name = _("document")
    verbose_name_plural = _("documents")
    ordering = ["-created_at"]

def save(self, *args, **kwargs):
    category_name = self.category.name
    file_base_path = os.path.join(MEDIA_ROOT, str(self.document_file))
    file_basename, file_extension = os.path.splitext(os.path.basename(file_base_path))
    file_name = category_name+"/"+slugify(urlify(file_basename))+file_extension
    file_path = file_name.replace(category_name, "media")
    self.ftp_url = "https://files.example.com/"+file_name
    super().save(*args, **kwargs)
    upload_to_cloud(file_name, file_path, "test-data")

上传到云功能:

def upload_to_cloud(blob_name, file_path, bucket_name):

try:
    bucket = client.get_bucket(bucket_name)
    blob = bucket.blob(blob_name)
    blob.upload_from_filename(file_path) # upload by file path
    logger.info("{} uploaded to {} successfully!".format(blob_name, bucket_name))
    delete_uploaded_file(file_path, blob_name)
    return True

except Exception as e:
    logger.error(e)
    return False

def delete_uploaded_file(file_path, blob_name):
    if os.path.isfile(file_path):
        os.remove(file_path)
        logging.info("{} is deleted from media folder.".format(blob_name))

标签: pythondjangogoogle-cloud-storage

解决方案


推荐阅读