Django+七牛上传+查看+下载文件相关函数,新整理未完全测试
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+七牛上传+查看+下载文件相关函数,新整理未完全测试的更多相关文章
- iOS 客户端获取七牛上传token
		一.官方参考文档: 1.上传策略http://developer.qiniu.com/article/developer/security/put-policy.html 2.上传凭证(即uptoke ... 
- 每天一个linux命令(26):用SecureCRT来上传和下载文件
		用SSH管理linux服务器时经常需要远程与本地之间交互文件.而直接用SecureCRT自带的上传下载功能无疑是最方便的,SecureCRT下的文件传输协议有ASCII.Xmodem.Zmodem. ... 
- 利用SecureCRT上传、下载文件(使用sz与rz命令),超实用!
		利用SecureCRT上传.下载文件(使用sz与rz命令),超实用! 文章来源:http://blog.csdn.net/dongqinliuzi/article/details/39623169 借 ... 
- 每天一个linux命令(26)--用SecureCRT来上传和下载文件
		用SSH管理Linux 服务器时经常需要远程与本地之间交互文件,而直接使用 SecureCRT 自带的上传下载功能无疑是最方便的,SecureCRT下的文件传输协议有ASCII.Xmodem.Zmod ... 
- 每天一个linux命令(26):用SecureCRT来上传和下载文件(转载自竹子)
		用SSH管理linux服务器时经常需要远程与本地之间交互文件.而直接用SecureCRT自带的上传下载功能无疑是最方便的,SecureCRT下的文件传输协议有ASCII.Xmodem.Zmodem. ... 
- 用SecureCRT来上传和下载文件
		用SSH管理linux服务器时经常需要远程与本地之间交互文件.而直接用SecureCRT自带的上传下载功能无疑是最方便的,SecureCRT下的文件传输协议有ASCII.Xmodem.Zmodem. ... 
- Linux学习笔记:使用ftp命令上传和下载文件
		Linux中如何使用ftp命令,包括如何连接ftp服务器,上传or下载文件以及创建文件夹.虽然现在有很多ftp桌面应用(例如:FlashFXP),但是在服务器.SSH.远程会话中掌握命令行ftp的使用 ... 
- linux常用命令:用SecureCRT来上传和下载文件
		用SSH管理linux服务器时经常需要远程与本地之间交互文件.而直接用SecureCRT自带的上传下载功能无疑是最方便的,SecureCRT下的文件传输协议有ASCII.Xmodem.Zmodem. ... 
- oracle EBS上传和下载文件(转)
		最近一直在做一个工作流的项目,最终用户要求在发送消息的时候可以附带附件,这个又是给我的一个难题.在网上查了一下ORACLE上传资料,找到了黄建华前辈写的<Oracle EBS Forms开发指南 ... 
随机推荐
- 转 Kafka、RabbitMQ、RocketMQ等消息中间件的对比 —— 消息发送性能和优势
			Kafka.RabbitMQ.RocketMQ等消息中间件的对比 —— 消息发送性能和优势 引言 分布式系统中,我们广泛运用消息中间件进行系统间的数据交换,便于异步解耦.现在开源的消息中间件有很多,前 ... 
- fiddler的一些记录
			通过execaction.exe可以给fiddler发命令,控制抓包开始和停止 https://stackoverflow.com/questions/29916508/start-and-stop- ... 
- python框架之Django(13)-admin组件
			使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 settings.py 中的 INSTALLED_APPS ... 
- python基础之 编码进阶,文件操作和深浅copy
			1.编码的进阶 字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码.即先将其他编码的字符串解码(decode)成unicode,再从unic ... 
- C#设计模式(3)——工厂方法模式(转)
			C#设计模式(3)——工厂方法模式 一.引言 在简单工厂模式中讲到简单工厂模式的缺点,有一点是——简单工厂模式系统难以扩展,一旦添加新产品就不得不修改简单工厂方法,这样就会造成简单工厂的实现逻辑过 ... 
- HTML 鼠标坐标和元素坐标
			在这一篇文章中,将会介绍鼠标坐标.元素坐标以及鼠标在指定元素内的坐标. 1. 鼠标坐标 在触发鼠标相关事件时(如:click.mousemove),可以通过事件对象获取当前鼠标的坐标. 获取的坐标可分 ... 
- Git换行符是如何精确控制的
			Git换行符是如何精确控制的 Checkout Windows-style, commit Unix-style Git will convert LF to CRLF when checking o ... 
- 为什么一个java源文件中只能有一个public类
			问题:一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 答案:可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致.一个文件 ... 
- Qt::WindowFlags枚举类型解析
			在使用Qt设计的时候经常会看到QWidget控件的构造函数出现下面这样一句话: QWidget(QWidget *parent=0,Qt::WindowFlags f=0) QWidget *pare ... 
- ubuntu 16.04 tip
			参考 1. 安装 python3.6 sudo add-apt-repository ppa:jonathonf/python-3.6 sudo apt-get update sudo apt-ge ... 
