M

class File(models.Model):  # 文档模型
name = models.CharField(max_length=255)
staff = models.ForeignKey('Staff')
qiniu_name = models.CharField(max_length=255)
remark = models.CharField(max_length=255, default='')

Form

class UploadStafffile(forms.Form):  # 员工上传文件的名字,员工id,员工的备注
name = forms.CharField()
staff = forms.IntegerField()
remark = forms.CharField()
data = forms.FileField() class StaffAllfile(forms.Form):
id = forms.IntegerField() class DownloadStafffile(forms.Form):
qiniu_name = forms.CharField

V

# -*- coding: utf-8 -*-
from __future__ import unicode_literals import base64
import datetime
import json
import random
import string import requests
from django.http import HttpResponse, HttpResponseBadRequest
from django.shortcuts import redirect
from qiniu import Auth
from qiniu.utils import urlsafe_base64_encode from basic import models, forms QINIU = {'access_key': 'SDbdxmtksVbzc6iZHh0YDX6yFbxIMegm_yqP0wqu',
'secret_key': 'cqhR4eMnt_-M0l2NpiBEE02RB9guJxRl_0H3000G', 'bucket_name': 'schoolsalary'} # 上传自命名文档
def upload_staff_file(request):
form = forms.UploadStafffile(request.POST)
if not form.is_valid():
e = ','.join([form.errors[i][0] for i in form.errors]) if len(form.errors) > 0 else u'未知错误'
return HttpResponseBadRequest(json.dumps({'code': 'false', 'msg': e, 'data': []}),
content_type='application/json')
q = Auth(QINIU['access_key'], QINIU['secret_key'])
file_name = form.cleaned_data['name']
staff_id = form.cleaned_data['staff']
remark = form.cleaned_data['remark']
data_file = form.cleaned_data['data'] # reuqest.FILES.get('data')
if not models.Staff.objects.filter(id=staff_id).exists():
return HttpResponseBadRequest(json.dumps({'code': 'false', 'msg': '上传文件的员工不存在', 'data': []}),
content_type='application/json')
key = ''.join(random.sample(string.ascii_letters + string.digits, 8)) # 随机八位字符
while models.File.objects.filter(qiniu_name=key): # 假如随机的八位字符已经被使用
key = ''.join(random.sample(string.ascii_letters + string.digits, 8)) # 新随机八位字符
token = q.upload_token(QINIU['bucket_name'], key, 3600)
base64_file = base64.b64encode(data_file.read())
qiniu_upload_url = "http://up-z2.qiniu.com/putb64/%s/key/%s/mimeType/%s" % \
(str(-1), urlsafe_base64_encode(key), urlsafe_base64_encode(file_name.split('.')[-1]))
headers = {"Content-type": "application/octet-stream", "Authorization": "UpToken " + token}
requests.post(qiniu_upload_url, headers=headers, data=base64_file)
# resp = json.loads(requests.post(qiniu_upload_url, headers=headers, data=base64_file).content)
# hash = resp['hash'] # hash校验
# filename = resp['key']
file_obj = models.File()
file_obj.name = file_name
file_obj.staff = models.Staff.objects.get(id=staff_id)
file_obj.qiniu_name = key
file_obj.remark = remark
file_obj.save()
return HttpResponse(json.dumps({'code': 'ok', 'msg': '上传文档成功', 'data': []}), content_type='application/json') # 查看某员工所有自命名文档
def staff_all_file(request):
form = forms.StaffAllfile(request.POST)
if not form.is_valid():
e = ','.join([form.errors[i][0] for i in form.errors]) if len(form.errors) > 0 else u'未知错误'
return HttpResponseBadRequest(json.dumps({'code': 'false', 'msg': e, 'data': []}),
content_type='application/json')
staff_id = form.cleaned_data['id']
if not models.Staff.objects.filter(id=staff_id).exists():
return HttpResponseBadRequest(json.dumps({'code': 'false', 'msg': '员工不存在', 'data': []}),
content_type='application/json')
query_set = models.File.objects.get(id=staff_id).file.all()
data_list = list()
for i in query_set:
one_file_dic = dict()
one_file_dic['name'] = i.name
one_file_dic['qiniu_name'] = i.qiniu_name
one_file_dic['remark'] = i.remark
data_list.append(one_file_dic)
json_dic = {'code': 'ok', 'data': data_list, 'msg': '查询员工所有文档成功'}
return HttpResponse(json.dumps(json_dic), content_type='application/json') def download_staff_file(request):
form = forms.DownloadStafffile(request.POST)
if not form.is_valid():
e = ','.join([form.errors[i][0] for i in form.errors]) if len(form.errors) > 0 else u'未知错误'
return HttpResponseBadRequest(json.dumps({'code': 'false', 'msg': e, 'data': []}),
content_type='application/json')
q = Auth(QINIU['access_key'], QINIU['secret_key'])
qiniu_name = form.cleaned_data['qiniu_name']
url = 'http://pn9re4v61.bkt.clouddn.com/{}?attname='.format(qiniu_name)
private_url = q.private_download_url(url, expires=300)
return redirect(private_url)

Django+七牛上传+查看+下载文件相关函数,新整理未完全测试的更多相关文章

  1. iOS 客户端获取七牛上传token

    一.官方参考文档: 1.上传策略http://developer.qiniu.com/article/developer/security/put-policy.html 2.上传凭证(即uptoke ...

  2. 每天一个linux命令(26):用SecureCRT来上传和下载文件

    用SSH管理linux服务器时经常需要远程与本地之间交互文件.而直接用SecureCRT自带的上传下载功能无疑是最方便的,SecureCRT下的文件传输协议有ASCII.Xmodem.Zmodem. ...

  3. 利用SecureCRT上传、下载文件(使用sz与rz命令),超实用!

    利用SecureCRT上传.下载文件(使用sz与rz命令),超实用! 文章来源:http://blog.csdn.net/dongqinliuzi/article/details/39623169 借 ...

  4. 每天一个linux命令(26)--用SecureCRT来上传和下载文件

    用SSH管理Linux 服务器时经常需要远程与本地之间交互文件,而直接使用 SecureCRT 自带的上传下载功能无疑是最方便的,SecureCRT下的文件传输协议有ASCII.Xmodem.Zmod ...

  5. 每天一个linux命令(26):用SecureCRT来上传和下载文件(转载自竹子)

    用SSH管理linux服务器时经常需要远程与本地之间交互文件.而直接用SecureCRT自带的上传下载功能无疑是最方便的,SecureCRT下的文件传输协议有ASCII.Xmodem.Zmodem. ...

  6. 用SecureCRT来上传和下载文件

    用SSH管理linux服务器时经常需要远程与本地之间交互文件.而直接用SecureCRT自带的上传下载功能无疑是最方便的,SecureCRT下的文件传输协议有ASCII.Xmodem.Zmodem. ...

  7. Linux学习笔记:使用ftp命令上传和下载文件

    Linux中如何使用ftp命令,包括如何连接ftp服务器,上传or下载文件以及创建文件夹.虽然现在有很多ftp桌面应用(例如:FlashFXP),但是在服务器.SSH.远程会话中掌握命令行ftp的使用 ...

  8. linux常用命令:用SecureCRT来上传和下载文件

    用SSH管理linux服务器时经常需要远程与本地之间交互文件.而直接用SecureCRT自带的上传下载功能无疑是最方便的,SecureCRT下的文件传输协议有ASCII.Xmodem.Zmodem. ...

  9. oracle EBS上传和下载文件(转)

    最近一直在做一个工作流的项目,最终用户要求在发送消息的时候可以附带附件,这个又是给我的一个难题.在网上查了一下ORACLE上传资料,找到了黄建华前辈写的<Oracle EBS Forms开发指南 ...

随机推荐

  1. arcpy加载mxd文件时,无效的MXD路径,提示assert (os.path.isfile(mxd) or (mxd.lower() == "current")), gp.getIDMessage(89004, "Invalid MXD filename")

    无效的MXD路径,将路径前加‘u’,改为这种: mxdPath = u"C:\\1331\\DB\\Original Files\\dd.mxd" 参考: https://gis. ...

  2. mysql数据库的主从同步,实现读写分离 g

    https://blog.csdn.net/qq_15092079/article/details/81672920 前言 1 分别在两台centos 7系统上安装mysql 5.7 2 master ...

  3. InternalError (see above for traceback): Blas GEMM launch failed

    训练BiLSTM模型的时候报错: InternalError (see above for traceback): Blas GEMM launch failed : a.shape=(32, 200 ...

  4. 前端JS常见面试题(代码自撸)

    题目一示例: 适用于子数组等长度及不等长度. let arr = [ [1,2,3], [5,6,7,8], [9,10,11,12,13] ] function arrayDiagonal(arr) ...

  5. 二叉查找树ADT

    二叉查找树ADT 定义:是一个二叉树,其中每一个节点的值大于左子树的所有值而小于右子树的所有值 平衡二叉树:平衡是指一个二叉树的任何节点的深度均不得过深 AVL树 定义:是一个二叉查找树,每个节点的左 ...

  6. 026-微软Ajax异步组件

    ASP.Net中内置的简化AJAX开发的控件UpdatePanel放入ScriptManager,将要实现AJAX效果的控件放到UpdatePanel中即可.UpdatePanel原理探秘,用Http ...

  7. Delphi7打开项目提示'one or more lines were too long and has been truncated'

    打开主项目文件直接显示一排'口'形状!查了下资料也问了下伙伴,这多半应该是文件损坏了,解决办法: 1. 不关D7的事,所以重装D7应该是无效的,最好看看自己是不是有备份文件,我之前有备份的所以直接覆盖 ...

  8. 0006-20180422-自动化第七章-python基础学习笔记

    内容回顾: - bytes - str 和bytes - int - str - list - tuple - 深拷贝和浅拷贝 今日内容: 数据类型 - bytes - int - str - boo ...

  9. 微信小程序 地图地址解析

    1.微信小程序提供了几个方式,引入地图, wx.getLocation(OBJECT) 获取当前的地理位置.速度.当用户离开小程序后,此接口无法调用:当用户点击“显示在聊天顶部”时,此接口可继续调用 ...

  10. SpringDataJpa开发环境的搭建以及使用

    一.所需工具 安装jdk.IntelliJ IDEA和mysql数据库. 二.SpringDataJpa快速起步 开发环境的搭建: ①.在IDEA软件上添加依赖包:在http://mvnreposit ...