【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( ...
随机推荐
- 关于c风格的字符串的基本函数
1.两个字符串的比较 //如果两个字符串相等 strcmp(s1,s2)=; //如果s1>s2 strcmp(s1,s2)>; //如果s1<s2 strcmp(s1,s2)< ...
- alpha冲刺(1/10)
前言 队名:旅法师 作业链接 队长博客 燃尽图 会议 会议照片 会议内容 陈晓彬(组长) 今日进展: 召开会议 安排任务 博客撰写 构建之法的阅读 问题困扰: Java的学习感觉无从下手,学基础语法好 ...
- 解决eclipse高版本JDK编译的项目到低版本JDK服务器上不能运行的问题
错误提示信息:Unsupported major.minor version 52.0,意思是说,当前jdk的版本不支持更高版本jdk编译出来的class文件. 我的编译环境,eclipse使用的是j ...
- (27)session(设置值、取值、修改、删除)
session的由来 Cookie虽然在一定程度上解决了“保持状态”的需求,但是由于Cookie本身最大支持4096字节,以及Cookie本身保存在客户端,可能被拦截或窃取,因此就需要有一种新的东西, ...
- 第一章 HTML+CSS(上)
HTML 网页的组成 HTML简介 HTML的语法 HTML的常用标签 HTML中的表格和表单 CSS的简单应用 我们这里使用WebStorm开发工具 配置浏览器 常用插件: CodeGlance 代 ...
- centos7 下yum源安装nginx
简单粗暴: .rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noar ...
- 【转】使用VisualStudio完成自动化C++代码生成和编译工作(GacUI)
使用VisualStudio完成自动化C++代码生成和编译工作(GacUI) GacUI终于进入制作dll的阶段了.昨天上传了一个新的工程,在Vczh Library++3.0(E:\Code ...
- jquery,attr,prop,checkbox标签已有checked=checked但是不显示勾选
最近在做项目的过程中碰到了这样的一个问题:在使用bootstrap模态框的过程中,在模态框中有一个checkbox标签,一开始是为选中的,当点击触发模态框按钮,选中chcekbox时,会显示勾选,这个 ...
- Centos7 下的SVN安装与配置
Centos7 下的SVN安装与配置 1.关闭防火墙 临时关闭防火墙 systemctl stop firewalld 永久防火墙开机自关闭 systemctl disable firewalld 临 ...
- Activiti流程设计工具
在Actitivi工程的src/main/resources新建一个文件夹diagrams 然后右键,创建一个activiti Diagram 取名为helloWorld后finish 中间区域,是我 ...