Django:如何正确加载不在 MEDIA_ROOT 中的文件 |文件字段?
Django: How to load file not in MEDIA_ROOT correctly | FileField?
在我的 Django 项目中,我有一个应用程序,我想在其中加载不在 MEDIA_ROOT 中的文件。我使用 storage
属性来更改位置,但它引发了错误。
我使用了下一个代码,但是当我尝试加载文件时出现错误。我该如何解决这个问题?
settings.py:
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media_root')
models.py:
from django.core.files.storage import FileSystemStorage
from os import environ
PRODUCT_STORAGE = FileSystemStorage(location=environ.get('PRODUCT_STORAGE_PATH'))
def product_file_upload_path(instance, filename):
if instance.category=="1":
path = '/category_1/' + '/%s' % filename
return path
elif instance.category=="2":
path = '/category_2/' + '%s' % filename
return path
else:
path = '%s' % filename
return path
class Product(models.Model):
file = models.FileField(
max_length=255,
blank=True,
null=True,
validators=[validate_file_extension],
storage=PRODUCT_STORAGE,
upload_to=product_file_upload_path,
)
错误:
The joined path (/category_1/test.pdf) is located outside of the base path component (/other_folder)
删除前导斜杠并使用 'category_1/'
和 'category_2/'
。
您还需要从 '/%s'
中删除斜杠,否则您将在路径中得到 //
。您可以使用 os.path.join()
来防止这样的错误。
import os
path = os.path.join('category1', filename)
在我的 Django 项目中,我有一个应用程序,我想在其中加载不在 MEDIA_ROOT 中的文件。我使用 storage
属性来更改位置,但它引发了错误。
我使用了下一个代码,但是当我尝试加载文件时出现错误。我该如何解决这个问题?
settings.py:
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media_root')
models.py:
from django.core.files.storage import FileSystemStorage
from os import environ
PRODUCT_STORAGE = FileSystemStorage(location=environ.get('PRODUCT_STORAGE_PATH'))
def product_file_upload_path(instance, filename):
if instance.category=="1":
path = '/category_1/' + '/%s' % filename
return path
elif instance.category=="2":
path = '/category_2/' + '%s' % filename
return path
else:
path = '%s' % filename
return path
class Product(models.Model):
file = models.FileField(
max_length=255,
blank=True,
null=True,
validators=[validate_file_extension],
storage=PRODUCT_STORAGE,
upload_to=product_file_upload_path,
)
错误:
The joined path (/category_1/test.pdf) is located outside of the base path component (/other_folder)
删除前导斜杠并使用 'category_1/'
和 'category_2/'
。
您还需要从 '/%s'
中删除斜杠,否则您将在路径中得到 //
。您可以使用 os.path.join()
来防止这样的错误。
import os
path = os.path.join('category1', filename)