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)

原文地址:https://www.cnblogs.com/bqwzx/p/10618724.html

时间: 2024-10-07 20:34:16

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

django通过fdfs上传,下载文件

1.继承django的Storage类,重写open,save和exist方法 from django.core.files.storage import Storage from fdfs_client.client import Fdfs_client class FDFSStorage(Storage): def open(self, name, mode='rb'): pass def save(self, name, content, max_length=None): client

iOS 客户端获取七牛上传token

一.官方参考文档: 1.上传策略http://developer.qiniu.com/article/developer/security/put-policy.html 2.上传凭证(即uptoken)http://developer.qiniu.com/article/developer/security/upload-token.html 3.下载凭证http://developer.qiniu.com/article/developer/security/download-token.h

关于使用elementUI直传七牛云上传 and 下载踩坑

这几天一直研究七牛云的,,由于本人对elementUI框架的不熟悉,,踩了很多坑. 首先需要注册一个七牛云,最近快赶上双十一,所以七牛云新用户价格低廉500G*6个月只用了一分钱,废话不多说直接上代码. 先说说上传 前端使用elementUI的<el-upload>组件: <el-upload action="http://upload-z2.qiniup.com" :http-request="sliderRequest" :name="

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

原文网址:http://www.cnblogs.com/peida/archive/2012/11/28/2793181.html 用SSH管理linux服务器时经常需要远程与本地之间交互文件.而直接用SecureCRT自带的上传下载功能无疑是最方便的,SecureCRT下的文件传输协议有ASCII.Xmodem.Zmodem. 文件传输协议: 文件传输是数据交换的主要形式.在进行文件传输时,为使文件能被正确识别和传送,我们需要在两台计算机之间建立统一的传输协议.这个协议包括了文件的识别.传送的

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

    借助securtCRT,使用linux命令sz可以很方便的将服务器上的文件下载到本地,使用rz命令则是把本地文件上传到服务器.     其中,对于sz和rz的理解与记忆我用了如下的方法(很多时候容易搞混):     sz中的s意为send(发送),告诉客户端,我(服务器)要发送文件 send to cilent,就等同于客户端在下载.     rz中的r意为received(接收),告诉客户端,我(服务器)要接收文件 received by cilent,就等同于客户端在上传.    

七牛上传视频添加到队列时视频大小是否添加

最近在做视频分析的项目,遇到了一些关于七牛上传视频文件的问题. 当 选择的视频文件 大于 本地剩余空间 时,则取消上传. 'FilesAdded': function(up, files) { plupload.each(files, function(file,index) { //重点在这里 var fileSize=0; for(var i=0;i<files.length;i++){ fileSize+= Math.ceil(files[i].size/1024/1024); }; //

linux命令学习笔记(26):用SecureCRT来上传和下载文件

用SSH管理linux服务器时经常需要远程与本地之间交互文件.而直接用SecureCRT自带的上传下载功能无疑是最方便的,SecureCRT下的文件传输协议有ASCII.Xmodem.Zmodem. 文件传输协议: 文件传输是数据交换的主要形式.在进行文件传输时,为使文件能被正确识别和传送,我们需要在两台计算机之间建立统一的传输协议.这个协议包括了文件的识别.传送的起止时间.错误的判断与纠正等内容.常见的传输协议有以下几种: ASCII:这是最快的传输协议,但只能传送文本文件. Xmodem:这

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

用SSH管理linux服务器时经常需要远程与本地之间交互文件.而直接用SecureCRT自带的上传下载功能无疑是最方便的,SecureCRT下的文件传输协议有ASCII.Xmodem.Zmodem. 文件传输协议: 文件传输是数据交换的主要形式.在进行文件传输时,为使文件能被正确识别和传送,我们需要在两台计算机之间建立统一的传输协议.这个协议包括了文件的识别.传送的起止时间.错误的判断与纠正等内容.常见的传输协议有以下几种:  ASCII:这是最快的传输协议,但只能传送文本文件.  Xmodem

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

用SSH管理Linux 服务器时经常需要远程与本地之间交互文件,而直接使用 SecureCRT 自带的上传下载功能无疑是最方便的,SecureCRT下的文件传输协议有ASCII.Xmodem.Zmodem. 文件传输协议: 文件传输是数据交换的主要形式.在进行文件传输时,为使文件能被正确识别和传送,我们需要在两天计算机之间建立统一的传输协议.这个协议包括了文件的识别.传送的起止时间.错误的判断与纠正等内容.常见的传输协议有以下几种: ASCII:这是最快的传输协议,但只能传送文本文件. Xmod