Я загрузил каталог, используя django и JavaScript. Теперь я пытаюсь загрузить этот каталог из администратора django. Для этого я перешел по этой ссылке нажмите здесь. Когда я загрузил каталог в django, администратор создал следующую таблицу. Имя файла указывает имя загруженной папки.
Если я нажму на имя файла, он покажет мне следующую ошибку. Я хочу загрузить этот каталог в виде zip-файла из администратора django. Кто-нибудь может помочь мне с этим?
Вот мой model.py:
class Prearchive(models.Model):
file = models.FileField(upload_to='media/', null=True)
file_name = models.CharField(max_length=500,primary_key=True)
file_id = models.ForeignKey(CreateScan, on_delete=models.CASCADE,default=1)
def _str_(self):
return self.file_name
admin.py:
from django.contrib import admin
from .models import CreateScan, Prearchive
# Register your models here.
class PrearchiveAdmin(admin.ModelAdmin):
model=Prearchive
list_display = ('file_name','file_id','file_link')
def file_link(self, obj):
if obj.file:
return "<a href='%s' download>Download</a>" % (obj.file.url,)
else:
return "No attachment"
file_link.allow_tags = True
file_link.short_description = 'File Download'
admin.site.register(Prearchive , PrearchiveAdmin)
view.py:
@login_required
def downloadScanView(request,url):
print('url',url)
response = HttpResponse(content_type='application/zip')
file_path = os.path.join(settings.MEDIA_ROOT, url)
zip_download = ZipFile(response, 'w',ZIP_DEFLATED)
if os.path.exists(file_path):
for root, dir, files in os.walk(file_path):
print('r = ',root)
for file in files:
zip_download.write(os.path.join(root,file))
response['Content-Disposition'] = 'attachment; filename={}'.format(os.path.basename(url)+'.zip')
return response
django
, и основное предположение состоит в том, что если вы отправляете файлы для загрузки, вы делаете это с помощью s3 или серверной части хранилища мультимедиа. Вы определили корень носителя в вашей папкеsettings.py
? - person frozenOne   schedule 28.06.2020file_link
. Это поможет: stackoverflow.com /вопросы/50764746/ - person frozenOne   schedule 28.06.2020