今天测试上传图片的时候,发现一只报错说找不到文件:FileNotFoundError

通过检查路径的输出,发现首先在settings配置路径的时候有问题

  1. MEDIA_ROOT=os.path.join(BASE_DIR,'/static/media')
    这里多了一个/ 所以导致拼接后的路径是由C盘开始的,而不是项目路径开始的 C:/static/media/filename.jpg
  1. 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下的
    于是又把路径改为:
  1. MEDIA_ROOT=os.path.join(BASE_DIR,'img_test/static/media')
    之后就成功啦
    之前一直以为是保存上传文件的问题,(上传不成功,所以没有找到文件)当仔细检查后,就发现其实是那个用来保存上传文件的路径没对,程序找不到应该保存在哪,自然也不会写入文件
    另外注意写入文件要用'wb'
  2.  
  3. =============================================
  1.  
  1. 另:关于显示上传后的图片,其实这个可以使用显示静态文件的方法,不过由于上传文件放在/static/media所以路径需要稍作修改
    views.py:
  1. from chuanzhi_test_dj2 import settings 要引入settings才有MEDIA_ROOT
  1. 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路径
    #其实当发现文件路径有问题就可以输出路径来看,检查数据路径和我们的项目结构是否对应
  1. context={'filedir':"media/"+file.name,}
    #我的做法是先在这里拼接了media/filename路径,因为模板中使用static的话能自动找到APP下的static文件夹,所以只需再加一层media
  2.  
  3. with open(filedir,'wb') as pic: #写入这里注意用wb
    for c in file.chunks():
    pic.write(c)
  4.  
  5. return render(request,'img_test/showUploadFile.html',context)
  6.  
  7. else:
    return HttpResponse('error')
  8.  
  9. 模板:
  1. {% 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
  1. <hr>
  2.  
  3. </body>
    </html>

而urls.py配置如常:

  1. app_name='img'
  2.  
  3. urlpatterns=[
    re_path('upload_img/$',uploadImg,name='upload_img'),
    re_path('uploadHandler/',uploadHandler,name='uploadHandler'),
    ]

【Django】关于上传图片遇到的问题的更多相关文章

  1. Django如何上传图片并对上传图片进行访问

    通过一个示例的完整演示过程,来学习django如何上传图片,以及对于media文件夹中的上传图片进行请求: 1.配置settings.py MEDIA_URL = '/media/' MEDIA_RO ...

  2. Django中上传图片---避免因图片重名导致被覆盖

    上一篇文章中(https://www.cnblogs.com/lutt/p/10640412.html),我们以图片文件夹+图片名字的方式来储存图片,这样的做法会导致有重名的图片会导致之前的图片被覆盖 ...

  3. [Django学习]上传图片

    上传图片 当Django在处理文件上传的时候,文件数据被保存在request.FILES FILES中的每个键为<input type="file" name="& ...

  4. django之上传图片

    上传图片 当Django在处理文件上传的时候,文件数据被保存在request.FILES FILES中的每个键为<input type="file" name="& ...

  5. Django 实现上传图片功能

    很多时候我们要用到图片上传功能,如果图片一直用放在别的网站上,通过加载网址的方式来显示的话其实也挺麻烦的,我们通过使用 django-filer 这个模块实现将图片文件直接放在自己的网站上. 感兴趣的 ...

  6. Django之上传图片,分页,三级联动

    Django1.8.2中文文档:Django1.8.2中文文档 上传图片 配置上传文件保存目录 1)新建上传文件保存目录. 2)配置上传文件保存目录. 后台管理页面上传图片 1)设计模型类. 2)迁移 ...

  7. django中上传图片的写法(转)

    view参数 @csrf_exemptdef before_upload_avatar(request):    before = True    return render_to_response( ...

  8. [系统开发] Django Admin上传图片简单校验

    我的 models里有个ImageField字段,用来保存用户头像,希望通过Django Admin上传时校验头像大小,如果太大就报错,并且不保存. 网上有不少方法,有的通过第三方软件实现,有的通过自 ...

  9. 关于django批量上传图片

    本来想一张一张上传的,但是明显会对客户造成不必要的麻烦,所以如果前台一次性上传五张十张的话,那就简单的多. 但是后台我数据库对于图片存储的字段只有一个,不可能有多少张照片就要多少个字段来存储.也就是说 ...

  10. django中上传图片的写法

    view参数 @csrf_exemptdef before_upload_avatar(request):    before = True    return render_to_response( ...

随机推荐

  1. noip-2006普及组-数列- 【模拟-找规律-快速幂】

    链接:https://ac.nowcoder.com/acm/contest/153/1047 来源:牛客网 题目描述 给定一个正整数k( ≤ k ≤ ),把所有k的方幂及所有有限个互不相等的k的方幂 ...

  2. python入门第二天

    啦啦啦啦啦!!!!我又来啦,几天该正式开始学习python语言啦,好高兴啊!!!今天学习的主要内容是变量和简单的数据类型!! 变量和简单的数据类型 大家回忆一下昨天的Hello Python Worl ...

  3. Java类加载过程及static详解

    类从被加载到JVM中开始,到卸载为止,整个生命周期包括:加载.验证.准备.解析.初始化.使用和卸载七个阶段. 其中类加载过程包括加载.验证.准备.解析和初始化五个阶段. 类加载器的任务就是根据一个类的 ...

  4. oracle-data-mining

    create user datamine identified by 123456 QUOTA UNLIMITED ON users; 然后在sqldeveloper工具界面-data miner中, ...

  5. 策略模式(Strategy )

    为实现一个目的采用不同的方式都可实现,具体看要采取哪种方式. //接口 public interface Strategy {    public void algorithmInterface(); ...

  6. yuan先生博客链接

    Yuan先生的博客网址   1 Web应用  https://www.cnblogs.com/yuanchenqi/articles/8869302.html 2 http协议 https://www ...

  7. 使用RecyclerView实现聊天界面

    原文地址:https://blog.csdn.net/wang_wy/article/details/79032698

  8. 数据访问安全--数据库遮罩及断词 Data Masking & Tokenization

    现在大数据时代几乎无隐私,各政府部门各公司都要求实名制(动不动手机认证,身份证号码认证),但又无力确保数据安全,称为乱象. 其实在2011年,我们就接触过数据库遮罩断词产品,一个澳大利亚公司产品. 简 ...

  9. 将打印(printk/printf)及时写入文件的方法

    问题是这样的,在测试一个gps的app的时候,我使用脚本  “ gps_test_app  > /tmp/gps_log.txt &" 但是但是,去查看gps_log.txt的 ...

  10. Struts2 环境搭建

    1.引入相关struts2 jar包 2.web.xml <?xml version="1.0" encoding="UTF-8"?> <we ...