如何在django上传和查看图像

问题描述 投票:0回答:1

models.朋友

 class FileUpload(models.Model):
    File_Name = models.CharField(max_length=255, blank=True)
    File_path = models.FileField(upload_to='')
    Description = models.CharField(max_length=255, blank=True)
    Upload_Date = models.DateTimeField(auto_now_add=True)

forms.朋友

 class FileUploadForm(forms.Form):
   class Meta:
      model = FileUpload

      File_Name = forms.CharField(label="File Name",max_length=255)  
      Description = forms.CharField(label="Description", max_length=255) 

我是Django的新手。我需要帮助。如何在数据库中上传图像并查看这些图像?提前致谢!

这里路径存储在数据库中,图像存储在文件夹中。但我不需要那个。我想保存图像和数据库的路径,我需要查看该图像。请帮忙!

views.朋友:

def uploadfile(request):
   print('inside upload logic')
   if request.method == 'POST':
      form = FileUploadForm(request.POST, request.FILES)
      if form.is_valid():
        # ImageUpload(request.FILES['File_Name'])  
         myfile = request.FILES['File_Name']

         fs = FileSystemStorage()
         filename = fs.save(myfile.name, myfile)
         uploaded_file_url = fs.url(filename)
         newdoc = FileUpload(File_Name=myfile.name, File_path=uploaded_file_url,  Description=request.POST['Description'])
         newdoc.save()
         #return HttpResponse("File uploaded successfuly")  
         return render(request, 'Login/fileupload.html')   
   else:
      form = FileUploadForm()
      return render(request, 'Login/fileupload.html', {
      'form': form
   }) 
django
1个回答
0
投票

您通常不应将图像数据存储在数据库中。如果您需要上传和存储图像,请使用ImageFieldFileField并按照docs中的说明保存图像。你唯一需要做的是:

form = FileUploadForm(request.POST, request.FILES)
if form.is_valid():
    uploaded_file = FileUpload(
        File_path=request.FILES['File_path'],  # or whatever you've called the file input
        File_name=form.cleaned_data['File_Name'],
        Description=form.cleaned_data['Description'])
    uploaded_file.save()

在你的情况下使用ModelForm会更容易,那么你只需要保存表单:

if form.is_valid():
    form.save()

这将以正确的方式自动保存文件。无需像您一样手动进行保存。

要查看图像就像这样简单:

file_upload = FileUpload.objects.get(id=34)
file_url = file_upload.File_path.url  # url relative to `MEDIA_ROOT`

# or in a template
{% load static %}
{% get_media_prefix %}{{ file_upload.File_path.url }}

如果你真的需要将图像存储为二进制blob到你的数据库(但要注意它几乎没有意义),使用Django的BinaryField,如here所述。

这也意味着您必须处理从二进制blob到正确的图像文件来回转换图像。还要考虑存储内容类型(image / jpg或image / png或image / webp),因为您需要正确地重新创建文件。

© www.soinside.com 2019 - 2024. All rights reserved.