編寫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映射訪問地址:
訪問地址上傳圖片,抓包如圖:
上傳成功:
數據庫存儲的字段: