关于定制FileField中的上传文件名称问题


Posted in Javascript onAugust 22, 2017

FileField中的upload_to属性可以设定上传文件的存储目录和名称,它可以是个字符串,也可以是个callable,比如一个方法。

  当upload_to的值设为一个方法时,就可以对上传文件的名称进行修改了。方法需要两个参数,instance与filename,instance为此FileField所属的Model实例,filename为上传文件的名称。

  举例:

def user_directory_path(instance, filename):
 # file will be uploaded to MEDIA_ROOT/user_<id>/<filename>
 return 'user_{0}/{1}'.format(instance.user.id, filename)
class MyModel(models.Model):
 upload = models.FileField(upload_to=user_directory_path)

 当一个类定义了__call__方法时,也可以像func一样被调用,所以,upload_to的值也可以是一个定义了__call__方法的类。

   比如,要根据上传时间为文件名加时间戳:

import hashlib
import os
import time
from django.utils.deconstruct import deconstructible
@deconstructible
class TimeStampFileName(object):
 def __init__(self, path):
  self.path = os.path.join(path, "%s%s")
 def __call__(self, instance, filename):
  extension = os.path.splitext(filename)[1]
  data = "%s_%d"%(filename,int(time.time()))
  file_hash = hashlib.sha1(data).hexdigest()
  return self.path % (file_hash, extension)

 Model中的FileField可以如下定义:

class MyModel(models.Model):
 upload = models.FileField(upload_to=TimeStampFileName('media/'), )

总结

以上所述是小编给大家介绍的定制FileField中的上传文件名称,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
多种方法实现360浏览器下禁止自动填写用户名密码
Jun 16 Javascript
深入探讨javascript中的数据类型
Mar 04 Javascript
JavaScript通过function定义对象并给对象添加toString()方法实例分析
Mar 23 Javascript
JavaScript实现DIV层拖动及动态增加新层的方法
May 12 Javascript
通过npm引用的vue组件使用详解
Mar 02 Javascript
Vue 2.0学习笔记之使用$refs访问Vue中的DOM
Dec 19 Javascript
vue使用 better-scroll的参数和方法详解
Jan 25 Javascript
vue.js中实现登录控制的方法示例
Apr 23 Javascript
微信小程序自定义底部导航带跳转功能
Nov 27 Javascript
layui的布局和表格的渲染以及动态生成表格的方法
Sep 18 Javascript
JavaScript代码异常监控实现过程详解
Feb 17 Javascript
在vue中created、mounted等方法使用小结
Jul 21 Javascript
React复制到剪贴板的示例代码
Aug 22 #Javascript
Angularjs实现下拉框联动的示例代码
Aug 22 #Javascript
vue.js异步上传文件前后端实现代码
Aug 22 #Javascript
node中koa中间件机制详解
Aug 22 #Javascript
理解javascript async的用法
Aug 22 #Javascript
React Native之TextInput组件解析示例
Aug 22 #Javascript
EasyUI的DataGrid每行数据添加操作按钮的实现代码
Aug 22 #Javascript
You might like
php 动态多文件上传
2009/01/18 PHP
解析php常用image图像函数集
2013/06/24 PHP
封装ThinkPHP的一个文件上传方法实例
2014/10/31 PHP
解决laravel session失效的问题
2019/10/14 PHP
Dojo 学习笔记入门篇 First Dojo Example
2009/11/15 Javascript
javascript函数中的arguments参数
2010/08/01 Javascript
一个基于jQuery的树型插件(OrangeTree)使用介绍
2012/05/03 Javascript
javascript中全局对象的parseInt()方法使用介绍
2013/12/19 Javascript
nodejs开发微博实例
2015/03/25 NodeJs
JS从一组数据中找到指定的单条数据的方法
2016/06/02 Javascript
JavaScript中offsetWidth的bug及解决方法
2017/05/17 Javascript
JavaScript贪吃蛇小组件实例代码
2017/08/20 Javascript
[js高手之路]寄生组合式继承的优势详解
2017/08/28 Javascript
vue input 输入校验字母数字组合且长度小于30的实现代码
2018/05/16 Javascript
Vuex中的State使用介绍
2019/01/19 Javascript
node 文件上传接口的转发的实现
2019/09/23 Javascript
基于Python实现通过微信搜索功能查看谁把你删除了
2016/01/27 Python
python爬虫基本知识
2018/03/05 Python
Python实现批量读取图片并存入mongodb数据库的方法示例
2018/04/02 Python
python算法与数据结构之单链表的实现代码
2019/06/27 Python
python requests更换代理适用于IP频率限制的方法
2019/08/21 Python
python之yield和Generator深入解析
2019/09/18 Python
给大家整理了19个pythonic的编程习惯(小结)
2019/09/25 Python
用python中的matplotlib绘制方程图像代码
2019/11/21 Python
python 实现单通道转3通道
2019/12/03 Python
python网络编程socket实现服务端、客户端操作详解
2020/03/24 Python
美国运动鞋和服装网上商店:YCMC
2018/09/15 全球购物
NYX Professional Makeup官方网站:专业彩妆和美容产品
2019/10/29 全球购物
Can a struct inherit from another class? (结构体能继承类吗)
2014/07/22 面试题
业务部经理岗位职责
2014/01/04 职场文书
幼儿园父亲节活动方案
2014/03/11 职场文书
2015年安全生产管理工作总结
2015/05/25 职场文书
新闻报道稿范文
2015/07/23 职场文书
企业内部管理控制:银行存款控制制度范本
2020/01/10 职场文书
MySQL创建管理LIST分区
2022/04/13 MySQL
golang的文件创建及读写操作
2022/04/14 Golang