编写html页面:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>上传图片</title> </head> <body> <form action="" method="post" enctype="multipart/form-data"> <p align="center"><input type="file" name="filename" /></p> <p align="center"><input type="submit" value="上传" /></p> </form> </body> </html>
效果如图(太丑了):
编写view视图函数:
def upload(request): if request.method == "GET": return render(request,"upload.html") if request.method == "POST": # TODO 获取上传文件的处理对象,通过对象获取里面文件名称和内容 img = request.FILES.get("filename", None) print(img) # print(img.name) # 获取文件名称 # print(img.chunks) # 获取文件内容 # 创建文件 save_path = '{}/up_image/{}'.format(settings.MEDIA_ROOT,img.name) with open(save_path,'wb') as f: for content in img.chunks(): f.write(content) # 报存到数据库 FileUpload.objects.create(name=img.name) return HttpResponse("ok")
添加modes模型生成数据库表:
class FileUpload(models.Model): '''上传文件或图片''' name = models.CharField(max_length=30, blank=True, null=True, verbose_name="名称") image = models.ImageField(upload_to="up_image", blank=True, null=True, verbose_name="上传图片" ) file = models.FileField(upload_to="up_file", blank=True, null=True, verbose_name="上传文件" ) add_time = models.DateTimeField(auto_now_add=True, verbose_name="上传时间") def __str__(self): return self.__doc__ class Meta(): # TODO 后台显示中文 verbose_name = "上传文件和图片" verbose_name_plural = verbose_name
添加urls映射访问地址:
访问地址上传图片,抓包如图:
上传成功:
数据库存储的字段: