python - 无法从 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))
解决方案
推荐阅读
- python - 如何在正则表达式中为脏话添加异常?
- javascript - 如何在对象 jQuery 中应用样式动态创建的 DOM
- reactjs - React SSR 与 innerHTML 和 LCP 影响?
- mysql - 如何使用Having Clause并使其具有动态价值
- java - Kotiln - toDouble 3 / Int 2 = 1.5?
- javascript - 在初始化 javascript 之前无法访问“y”
- reactjs - 反应钩子组件没有获得新的道具值
- android - 新列的Android Room Auto Migration不起作用
- android - 安卓选项菜单。菜单顶部和底部的白条
- python - 在字典中查找值列表并重新调整其键