【Django】关于上传图片遇到的问题
今天测试上传图片的时候,发现一只报错说找不到文件:FileNotFoundError
通过检查路径的输出,发现首先在settings配置路径的时候有问题
MEDIA_ROOT=os.path.join(BASE_DIR,'/static/media')
这里多了一个/ 所以导致拼接后的路径是由C盘开始的,而不是项目路径开始的 (C:/static/media/filename.jpg)
MEDIA_ROOT=os.path.join(BASE_DIR,'static/media')
改为这样后,仍然提示找不到上传文件路径
后来发现,报错的路径C:\Users\Admin\PycharmProjects\chuanzhi_test_dj2/static/media/filename.jpg
里是直接项目路径就到了/static/media
而我的的/static/media其实是建立在一个APP下的
于是又把路径改为:
MEDIA_ROOT=os.path.join(BASE_DIR,'img_test/static/media')
之后就成功啦
之前一直以为是保存上传文件的问题,(上传不成功,所以没有找到文件)当仔细检查后,就发现其实是那个用来保存上传文件的路径没对,程序找不到应该保存在哪,自然也不会写入文件
另外注意写入文件要用'wb' =============================================
另:关于显示上传后的图片,其实这个可以使用显示静态文件的方法,不过由于上传文件放在/static/media所以路径需要稍作修改
views.py:
from chuanzhi_test_dj2 import settings 要引入settings才有MEDIA_ROOT
def uploadHandler(request):
if request.method=='POST':
file=request.FILES['pic']
filedir="%s/%s" %(settings.MEDIA_ROOT,file.name) #这里在settings配置MEDIA_ROOT=os.path.join(BASE_DIR,'img_test/static/media')注意添加了APP路径
#其实当发现文件路径有问题就可以输出路径来看,检查数据路径和我们的项目结构是否对应
context={'filedir':"media/"+file.name,}
#我的做法是先在这里拼接了media/filename路径,因为模板中使用static的话能自动找到APP下的static文件夹,所以只需再加一层media
with open(filedir,'wb') as pic: #写入这里注意用wb
for c in file.chunks():
pic.write(c)
return render(request,'img_test/showUploadFile.html',context)
else:
return HttpResponse('error')
模板:
{% load static from staticfiles %} 这里和静态文件处理一样导入
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<img src="{% static filedir %}" alt=""> 把前面view传来的路径media/filename.xxx放到static后就会自动在static下找media/filename.xxx
<hr> </body>
</html>
而urls.py配置如常:
app_name='img' urlpatterns=[
re_path('upload_img/$',uploadImg,name='upload_img'),
re_path('uploadHandler/',uploadHandler,name='uploadHandler'),
]
【Django】关于上传图片遇到的问题的更多相关文章
- Django如何上传图片并对上传图片进行访问
通过一个示例的完整演示过程,来学习django如何上传图片,以及对于media文件夹中的上传图片进行请求: 1.配置settings.py MEDIA_URL = '/media/' MEDIA_RO ...
- Django中上传图片---避免因图片重名导致被覆盖
上一篇文章中(https://www.cnblogs.com/lutt/p/10640412.html),我们以图片文件夹+图片名字的方式来储存图片,这样的做法会导致有重名的图片会导致之前的图片被覆盖 ...
- [Django学习]上传图片
上传图片 当Django在处理文件上传的时候,文件数据被保存在request.FILES FILES中的每个键为<input type="file" name="& ...
- django之上传图片
上传图片 当Django在处理文件上传的时候,文件数据被保存在request.FILES FILES中的每个键为<input type="file" name="& ...
- Django 实现上传图片功能
很多时候我们要用到图片上传功能,如果图片一直用放在别的网站上,通过加载网址的方式来显示的话其实也挺麻烦的,我们通过使用 django-filer 这个模块实现将图片文件直接放在自己的网站上. 感兴趣的 ...
- Django之上传图片,分页,三级联动
Django1.8.2中文文档:Django1.8.2中文文档 上传图片 配置上传文件保存目录 1)新建上传文件保存目录. 2)配置上传文件保存目录. 后台管理页面上传图片 1)设计模型类. 2)迁移 ...
- django中上传图片的写法(转)
view参数 @csrf_exemptdef before_upload_avatar(request): before = True return render_to_response( ...
- [系统开发] Django Admin上传图片简单校验
我的 models里有个ImageField字段,用来保存用户头像,希望通过Django Admin上传时校验头像大小,如果太大就报错,并且不保存. 网上有不少方法,有的通过第三方软件实现,有的通过自 ...
- 关于django批量上传图片
本来想一张一张上传的,但是明显会对客户造成不必要的麻烦,所以如果前台一次性上传五张十张的话,那就简单的多. 但是后台我数据库对于图片存储的字段只有一个,不可能有多少张照片就要多少个字段来存储.也就是说 ...
- django中上传图片的写法
view参数 @csrf_exemptdef before_upload_avatar(request): before = True return render_to_response( ...
随机推荐
- 《从Lucene到Elasticsearch:全文检索实战》学习笔记二
今天我给大家讲讲分词算法 分词算法概述:词是语义的最小单位.分词对搜索引擎的作用很大,可以促进搜索引擎程序自动识别语句的含义,可以提高搜索结果的匹配度,分析的质量也将直接影响了搜索结果的精确度.分词存 ...
- zombodb 几点说明
内容来自官方文档,截取部分 默认es 索引的副本为0 这个参考可以通过修改索引,或者在创建的时候通过with 参数指定,或者通过pg 的配置文件中指定 索引更多的列以为这使用了更多的es 能力 索引的 ...
- web前端常用代码于面试等资源
https://www.cnblogs.com/moqiutao/p/4766146.html
- 第十二章 NIO
12.NIO 12.1 Java NIO 概述 1课时 12.2 Java NIO.2 之Path.Paths 与 Files 的使用 1课时 12.3 自动资源管理 1课时 12.4 缓冲区(Buf ...
- java fail-fast和fail-safe
快速失败(fail—fast) 在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(如增加.删除等),则会抛出Concurrent Modification Exception. ...
- spark submit参数调优
在开发完Spark作业之后,就该为作业配置合适的资源了.Spark的资源参数,基本都可以在spark-submit命令中作为参数设置.很多Spark初学者,通常不知道该设置哪些必要的参数,以及如何设置 ...
- 【java】this用法
this代表当前类的引用对象:哪个对象调用方法,该方法内部的this就代表那个对象this关键字主要有两三个应用: (1)this调用本类中的属性,也就是类中的成员变量: class People { ...
- 虚拟空间,malloc
一,内存空间分布图 所以,mmap其实和堆一样,实际上可以说他们都是动态内存分配,但是严格来说mmap区域并不属于堆区,反而和堆区会争用虚拟地址空间. 这里要提到一个很重要的概念,内存的延迟分配,只有 ...
- putty安装和使用
https://blog.csdn.net/l707941510/article/details/80520790
- Can't parse message of type "gazebo.msgs.Packet" because it is missing required fields: stamp, type
在gazebo的仿真环境中,采用强化学习HER算法训练baxter执行reach.slide和pick and place任务. 运行HER算法,此时尚未启动gazebo仿真环境,出现如下报错: [l ...