[技術部落格] Django中檔案的儲存與通路
在TextMarking項目開發中,資料庫需要儲存使用者上傳的文本文檔。
原型設計:使用者點選上傳文本->儲存文本->文本發送到後端儲存為檔案。
我在此記錄一種文本儲存的方法
1. 在settings中配置media路徑
在django項目根目錄添加一個檔案夾media,并在settings中添加如下路徑
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
2. 在url中配置通路路徑
from django.conf.urls import url,include
from django.contrib import admin
from django.views.static import serve
from 項目名字.settings import MEDIA_ROOT
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^media/(?P<path>.*)$', serve, {"document_root":MEDIA_ROOT}),
url(r'^video/', include("APP名字.urls")),
]
配置完成後,可以通過http://127.0.0.1:8000/media/檔案夾名/.../檔案名通路項目終media檔案夾下的檔案
3. 配置models
from django.db import models
from django.core.files.storage import FileSystemStorage
class Car(models.Model):
photo = models.FileField(upload_to='video')
這是一個檔案,不一定是圖檔。FileField将資料插入資料庫的時候,會自動存放在配置的media檔案夾下的media/video/檔案名中,如果重複,會自動重命名。
4. views中儲存檔案
from django.shortcuts import render
from django.http import HttpResponse
from django.views.generic import View
# 導入剛剛的Cal類
from .models import Car
class UploadView(View):
def get(self, request):
return HttpResponse('result')
def post(self, request):
#接收上傳的檔案
file_obj = request.FILES.get('file', None)
# 上傳檔案的名字
print(file_obj.name)
# 我們給他重新命名
file_obj.name = "123456.mp4"
# 傳入資料庫
car= Car(photo=file_obj)
# 儲存
car.save()
return HttpResponse('post')
video/123456.mp4存了兩次,第二次因為重複,變成了video/123456_PomZXmG.mp4。
如果要對檔案進行通路,需要查詢這個字段的值,染後拼接處url即可,例如:
http://127.0.0.1:8000/media/video/123456_PomZXmG.mp4
參考資料
django上傳檔案并儲存,還可以通路
django怎樣儲存上傳的檔案