126.自动处理上传的文件,获取上传文件的url
使用模型来处理上传的文件:
在定义模型的时候,我们可以给存储的文件的字段指定为FileField,这个field可以传递一个upload_to参数,用来指定上传上来的文件保存到哪里,比如我们让它保存到项目的myfiles文件夹下,示例代码如下:
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=100)
content = models.CharField(max_length=100)
# 指定字段类型为FileField,就可以定义上传文件的字段,并且指定参数upload_to就可以指定上传的文件存储的文件夹
# 此处指定存储在项目文件下的files下。
# 指定了该字段之后就不用再在views.py文件中定义打开,写入,保存文件的函数了。非常简单
thumbnail = models.FileField(upload_to="myfiles")
调用完,就会把文件保存到files文件夹下面,并且会将这个文件的路径存储到数据库中。
from django.shortcuts import render
from django.http import HttpResponse
from django.views import View
from .models import Article
class IndexView(View):
def get(self,request):
return render(request, 'uploadfile/index.html')
def post(self, request):
title = request.POST.get('title')
content = request.POST.get('content')
<!--获取文件并且保存到models.py文件中FileField字段中upload_to参数指定的文件夹下-->
thumbnail = request.FILES.get('thumbnail')
Article.objects.create(title=title, content=content, thumbnail=thumbnail)
return HttpResponse('success!')
但是此时如果在浏览器中输入url:htp://127.0.0.1:8000/uploadfile/3D.txt,会返回404的页面,该页面找不到,这是怎么回事呢?命名我们的文件下有这个文件啊!为甚找不到呢?这是因为我们的urls.py文件中并没有添加我们上传的文件的url。所以才会出现404的错误,解决办法就是:
(1)在settings.py文件中配置上传的文件的url,在STATIC_URL = '/static/'文件下,添加两行:MEDIA_URL代表的是在浏览器中输入的url名,而MEDIA_ROOT代表的是上传的文件的存放目录,并且在浏览器中输入url进行查找的时候也是从该目录下进行查找的。如果配置了这两个变量在models.py文件中的接收上传文件的字段就可以不用指定upload_to参数了,它就会自动存放到MEDIA_ROOT配置的目录下。
STATIC_URL = '/static/'
MEDIA_ROOT = os.path.join(BASE_DIR,'media')
MEDIA_URL = '/media/'
(2)在项目的urls.py文件中的urlpatterns列表后面添加 + static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT),将上传文件的url进行拼接:
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('front/', include('front.urls')),
path('validator/', include('validator.urls')),
path('modelform/', include('Modelform.urls')),
path('uploadfile/', include('uploadfile.urls')),
] + static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
之后在浏览器中输入http://127.0.0.1:8000/media/3D.txt,就可以查看我们上传的文件的内容了。
考虑到网站在运行一段时间之后,用户上传的文件如果都上传到一个文件夹下的话,就会非常难以管理,因此我们可以再在media文件夹下指定一个文件夹,比如我们指定存储到media/files/文件夹下,注意因为我们在settings.py文件中配置了上传文件到哪个目录下,因此这里我们只需要配置子目录就行了。
thumbnail = models.FileField(upload_to='files')
同样可以按上传文件的年月日进行分类存储,配置为:
thumbnail = models.FileField(upload_to="%Y%m%d")
126.自动处理上传的文件,获取上传文件的url的更多相关文章
- Asp.Net文件的上传和下载
aspx页面: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="上传和下载文件. ...
- springMvc接受单个文件,多个文件,多组文件
web端 <form id="iconForm" enctype="multipart/form-data"></form> JS:通过 ...
- struts文件上传,获取文件名和文件类型
struts文件上传,获取文件名和文件类型 Action中还有两个属 性:uploadFileName和uploadContentType,这两个属性分别用于封装上传文件的文件名.文件类型.这是S ...
- springMvc 使用ajax上传文件,返回获取的文件数据 附Struts2文件上传
总结一下 springMvc使用ajax文件上传 首先说明一下,以下代码所解决的问题 :前端通过input file 标签获取文件,通过ajax与后端交互,后端获取文件,读取excel文件内容,返回e ...
- ie下获取上传文件全路径
ie下获取上传文件全路径,3.5之后的火狐是没法获取上传文件全路径的 /*获取上传文件路径*/ function getFilePath(obj) { var form = $(this).paren ...
- Asp.net上传文件Request.files获取不到文件
使用ftp上传文件,并且Request.files获取文件,今天发现获取到的文件个数始终是0个,查了下原来form标签中需加入enctype=”multipart/form-data”,呵呵了 < ...
- JS获取上传文件的绝对路径,兼容IE和FF
<input type="file" id="fileBrowser" name="fileBrowser" size="5 ...
- js获取上传文件内容(未完待续)
js 获取上传文件的字节数及内容 <div> 上传文件 : <input type="file" name = "file" id = &qu ...
- [sharepoint]rest api文档库文件上传,下载,拷贝,剪切,删除文件,创建文件夹,修改文件夹属性,删除文件夹,获取文档列表
写在前面 最近对文档库的知识点进行了整理,也就有了这篇文章,当时查找这些接口,并用在实践中,确实废了一些功夫,也为了让更多的人走更少的弯路. 系列文章 sharepoint环境安装过程中几点需要注意的 ...
随机推荐
- windows10 CTCP
windows上除了普通tcp之外,有一个CTCP. 据说可以提升长延时情况下的吞吐量. win7可以方便的通过netsh int tcp set global congestionprovider= ...
- ubuntu14.04安装mysql5.6.37
摘抄这篇文档是为了记录自己的日常学习情况,方便以后查看.后边注明了来源,如有不对的地方,希望大家指正,谢谢! 首先从mysql官网上下载所需的离线包,我现在的版本是(mysql-5.6.37-linu ...
- MySQL索引那些事
原文链接 大家有没有遇到过慢查询的情况,执行一条SQL需要几秒,甚至十几.几十秒的时间,这时候DBA就会建议你去把查询的 SQL 优化一下,怎么优化?你能想到的就是加索引吧? 为什么加索引就查的快了? ...
- 单页应用(SPA,Single-page-App)和多页应用(MPA,Multi-page App)的区别
单页应用(SPA,Single-page-App)和多页应用(MPA,Multi-page App)的区别 参考博客:https://www.jianshu.com/p/4c9c29967dd6
- node准备
=== 原生的api === express express 中间件相关的. https://juejin.im/post/5aa345116fb9a028e52d7217 推荐几篇入门的优质博客: ...
- 谈下slot-scope
Vue里有个slot插槽的概念,常用的一般是命名的slot和默认的slot, 这里谈下slot-scope,Vue2.6后改成v-slot slot-scope场景是父组件用子组件的数据,但是样式自己 ...
- Java日志介绍(3)-Logback
Logback 继承自Log4j,它建立在有十年工业经验的日志系统之上.它比其它所有的日志系统更快并且更小,包含了许多独特并且有用的特性. 1.配置 1.1.加载配置 Logback能够在初始化期间自 ...
- (1) Q#学习笔记 - 第一章 QDK安装
2020/2/22,开始学习Q#. 第1章 QDK的安装 第1节 简介 QDK是Microsoft Quantum 开发工具包,可以进行量子编程,主要包含: Q# 编程语言 在 Q# 中对复杂功能进行 ...
- SQLServer之查询当前服务器下所有目录视图表
SQL脚本 /*************1:删除临时表*************/ if exists(select * from tempdb..sysobjects where id=object ...
- nodejs对字符串进行base64转换和解析
nodejs不支持使用atob和btoa 进行字符串base64转换,转换方法如下: // 转为base64 var strToBase64 = new Buffer('aaabbbccc').toS ...