1 將文件保存到服務(wù)器本地
upload.html
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"></head><body><form action="" method="post" enctype="multipart/form-data"> {% csrf_token %} <div>用戶名:<input type="text" name="username"></div> <div>頭像<input type="file" name="avatar"></div> <input type="submit" value="提交"></form></body></html>urls.py
from django.conf.urls import urlfrom app01 import viewsurlpatterns = [ url(r'^upload',views.upload)]
views.py
from django.shortcuts import render,HttpResponse def upload(request): if request.method == 'POST': name = request.POST.get('username') avatar = request.FILES.get('avatar') with open(avatar.name,'wb') as f: for line in avatar: f.write(line) return HttpResponse('ok') return render(request,'upload.html')總結(jié)
這樣,我們就做好了一個(gè)基本的文件上傳小示例,這里需要注意的有幾點(diǎn):
1.form表單里需要加上csrf_token驗(yàn)證
2.文件的input框的type的值為file
3.在視圖函數(shù)中獲取文件要用request.FILES.get()方法
4.通過(guò)obj.name可以獲取文件的名字
2 將文件上傳到數(shù)據(jù)庫(kù)
models.py
from django.db import models class User(models.Model): username = models.CharField(max_length=16) avatar = models.FileField(upload_to='avatar')
views.py
def upload(request): if request.method == 'POST': name = request.POST.get('username') avatar = request.FILES.get('avatar') models.User.objects.create(username=name,avatar=avatar) return HttpResponse('ok') return render(request,'upload.html')總結(jié)
上面已經(jīng)實(shí)現(xiàn)了將文件上傳到數(shù)據(jù)庫(kù)的功能,需要注意的有幾點(diǎn):
1.所謂的上傳到數(shù)據(jù)庫(kù),不是講圖片本身或者二進(jìn)制碼放在數(shù)據(jù)庫(kù),實(shí)際上也是將文件上傳到服務(wù)器本地,數(shù)據(jù)庫(kù)只是存了一個(gè)文件的路徑,這樣用戶要調(diào)用文件的時(shí)候就可以通過(guò)路徑去服務(wù)器指定的位置找了
2.創(chuàng)建ORM的時(shí)候,avatar字段要有一個(gè)upload_to=''的屬性,指定上傳后的文件放在哪里
3.往數(shù)據(jù)庫(kù)添加的時(shí)候,文件字段屬性賦值跟普通字段在形式上是一樣的,如:models.User.objects.create(username=name,avatar=avatar)
4.如果有兩個(gè)用戶上傳的文件名重復(fù),系統(tǒng)會(huì)自動(dòng)將文件改名,效果如下:

附加
功能我們是實(shí)現(xiàn)了,看起來(lái)我們?cè)谡{(diào)用文件的時(shí)候,只需要通過(guò)數(shù)據(jù)庫(kù)文件路徑已經(jīng)保存的文件本身就可以訪問(wèn)圖片,讓它出現(xiàn)在網(wǎng)頁(yè)上,其實(shí)并不是這樣,
新聞熱點(diǎn)
疑難解答
圖片精選