博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django中的python文件上传
阅读量:5221 次
发布时间:2019-06-14

本文共 2533 字,大约阅读时间需要 8 分钟。

一、上传到本地

准备工作:

models中创建表:

class Book(models.Model):    name = models.CharField(        max_length=40    )    icon = models.ImageField(        upload_to="icons"  # 指定文件保存的路径名 系统自动创建    )

settings中配置存储路径

MEDIA_ROOT = os.path.join(BASE_DIR, "static/uploads")

生成一个不重复的文件名:

import uuid,hashlibdef get_unique_str():    uuid_str = str(uuid.uuid4())    md5 = hashlib.md5()    md5.update(uuid_str.encode('utf-8'))    return md5.hexdigest()

 

方法一(文件保存到本地和数据库):

views视图中的写法:

def test1(req):    if req.method == 'GET':        return render(req, 'mybook.html',{
'book_name':book.name,'icon':icon_url}) name = req.POST.get('name') myfile = req.FILES.get('icon') book = Book.objects.create(name=name,icon=myfile) #将数据存储到Book表中 return HttpResponse('OK')

前端页面写法:

    
Title
{% csrf_token %}

拼接图片的网络路径,可通过该路径在浏览器上显示出图片

icon_url = "http://{}/static/uploads/{}".format(            req.get_host(), #获取访问的域名加端口            book.icon.url  #图片的路径字符串        )

方法二(文件保存到本地):

views视图中的写法:

from .myutil import get_unique_str
def test2(req):    if req.method == 'GET':        return render(req,'mybook.html')    else:        name = req.POST.get('name')        myfile = req.FILES.get('icon')        filename = get_unique_str()+'.'+myfile.name.split('.')[-1]        # 文件路径        filepath = os.path.join(settings.MEDIA_ROOT,filename)        f = open(filepath,'wb')        for i in myfile.chunks():            f.write(i)        f.close()        return HttpResponse('OK')

前端页面的写法:

    
Title
{% csrf_token %}

二、上传到oss(***)

进入阿里云OSS管理控制台,找到以下信息

 

views视图中的写法

import oss2
from io import BytesIO
def upload_to_oss(req):
  if req.method == 'GET':       return render(req,'mybook.html')   # 将找到的信息填入下面空缺处
endpoint = ''    access_key_id = ''    access_key_secret = ''    bucket_name = ''    bucket_name_host = ""    # 生成一个认证对象    auth = oss2.Auth(access_key_id, access_key_secret)    bucket = oss2.Bucket(auth, endpoint, bucket_name)    # 获取文件    f = req.FILES.get("icon")    # 实例化io    buf = BytesIO()    # 写入到内存    for i in f.chunks():        buf.write(i)    # 调整指针到开头    buf.seek(0)    # 上传    filename = get_unique_str() + "." + f.name.split(".")[-1]    bucket.put_object(filename, buf.getvalue())return HttpResponse('ok')

 前端页面写法:

    
Title
{% csrf_token %}

  图片最终会被上传到阿里云OSS管理控制台中你选择的bucket的文件管理中。

转载于:https://www.cnblogs.com/wusir66/p/9872599.html

你可能感兴趣的文章
MS CRM 2011 创建基于Fetch的报表 -- 进阶版
查看>>
洛谷P2777
查看>>
PHPStorm2017设置字体与设置浏览器访问
查看>>
SQL查询总结 - wanglei
查看>>
安装cocoa pods时出现Operation not permitted - /usr/bin/xcodeproj的问题
查看>>
makefile中使用变量
查看>>
GIT笔记:将项目发布到码云
查看>>
JavaScript:学习笔记(7)——VAR、LET、CONST三种变量声明的区别
查看>>
JavaScript 鸭子模型
查看>>
PHP典型功能与Laravel5框架开发学习笔记
查看>>
SQL Server 如何查询表定义的列和索引信息
查看>>
项目上传到github上
查看>>
GCD 之线程死锁
查看>>
NoSQL数据库常见分类
查看>>
JS小工具_字符串转16进制数组_02
查看>>
信息安全系统设计基础实验四—20135214万子惠20135227黄晓妍
查看>>
一题多解 之 Bat
查看>>
Java 内部类
查看>>
测试一个对象是否是类字符串
查看>>
{面试题7: 使用两个队列实现一个栈}
查看>>