def file_url(self, host):
        url = ['{0}/mkfile/{1}'.format(host, self.size)]

        if self.mime_type:
            url.append('mimeType/{0}'.format(
                urlsafe_base64_encode(self.mime_type)))

        if self.key is not None:
            url.append('key/{0}'.format(urlsafe_base64_encode(self.key)))

        if self.file_name is not None:
            url.append('fname/{0}'.format(urlsafe_base64_encode(
                self.file_name)))

        if self.params:
            for k, v in self.params.items():
                url.append('{0}/{1}'.format(k, urlsafe_base64_encode(v)))
            pass

        if self.modify_time and self.keep_last_modified:
            url.append("x-qn-meta-!Last-Modified/{0}".format(
                urlsafe_base64_encode(rfc_from_timestamp(self.modify_time))))

        url = '/'.join(url)
        # print url
        return url
Exemple #2
0
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 = request.FILES.get('file')  # 不会form校验文件
    data_file_lastname = request.FILES.get('file').name.split('.')[-1]
    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 + '.' + data_file_lastname),
                        urlsafe_base64_encode(data_file_lastname))
    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 + '.' + data_file_lastname
    file_obj.staff = models.Staff.objects.get(id=staff_id)
    file_obj.qiniu_name = key + '.' + data_file_lastname
    file_obj.remark = remark
    file_obj.save()
    return HttpResponse(json.dumps({
        'code': 'ok',
        'msg': '上传文档成功',
        'data': []
    }),
                        content_type='application/json')
Exemple #3
0
    def file_url(self, host):
        url = ['http://{0}/mkfile/{1}'.format(host, self.size)]

        if self.mime_type:
            url.append('mimeType/{0}'.format(urlsafe_base64_encode(self.mime_type)))

        if self.key is not None:
            url.append('key/{0}'.format(urlsafe_base64_encode(self.key)))

        if self.params:
            for k, v in self.params.items():
                url.append('{0}/{1}'.format(k, urlsafe_base64_encode(v)))

        url = '/'.join(url)
        return url
Exemple #4
0
    def file_url(self, host):
        url = ['http://{0}/mkfile/{1}'.format(host, self.size)]

        if self.mime_type:
            url.append('mimeType/{0}'.format(urlsafe_base64_encode(self.mime_type)))

        if self.key is not None:
            url.append('key/{0}'.format(urlsafe_base64_encode(self.key)))

        if self.params:
            for k, v in self.params.items():
                url.append('{0}/{1}'.format(k, urlsafe_base64_encode(v)))

        url = '/'.join(url)
        return url
Exemple #5
0
 def fetch(self, url, key):
     to = self.__entry(key)
     resource = urlsafe_base64_encode(url)
     cmd = 'http://{0}/fetch/{1}/to/{2}'.format(config.IO_HOST, resource,
                                                to)
     r = self.__post(cmd)
     return _ret(r)
Exemple #6
0
    def mkbucketv2(self, bucket_name, region):
        """
        创建存储空间
        https://developer.qiniu.com/kodo/api/1382/mkbucketv2

        Args:
            bucket_name: 存储空间名
            region: 存储区域
        """
        bucket_name = urlsafe_base64_encode(bucket_name)
        return self.__rs_do('mkbucketv2', bucket_name, 'region', region)
Exemple #7
0
 def set_bucketImagesource(self,
                           bucket_name,
                           resourceDomain,
                           resourceHost=None):
     """
     设置 存储空间 镜像源
     https://developer.qiniu.com/kodo/api/3966/bucket-image-source
     Args:
         bucket_name: 存储空间名
     """
     resourceDomain = urlsafe_base64_encode(resourceDomain)
     resourceHost = urlsafe_base64_encode(resourceHost)
     if resourceHost is None or resourceHost == "":
         url = "{0}/image/{1}/from/{2}".format(
             config.get_default("default_uc_host"), bucket_name,
             resourceDomain)
     else:
         url = "{0}/image/{1}/from/{2}/host/{3}".format(
             config.get_default("default_uc_host"), bucket_name,
             resourceDomain, resourceHost)
     data = None
     return http._post_with_qiniu_mac(url, data, self.auth)
Exemple #8
0
    def change_mime(self, bucket, key, mime):
        """修改文件mimeType:

        主动修改指定资源的文件类型,具体规格参考:
        http://developer.qiniu.com/docs/v6/api/reference/rs/chgm.html

        Args:
            bucket: 待操作资源所在空间
            key:    待操作资源文件名
            mime:   待操作文件目标mimeType
        """
        resource = entry(bucket, key)
        encode_mime = urlsafe_base64_encode(mime)
        return self.__rs_do('chgm', resource, 'mime/{0}'.format(encode_mime))
Exemple #9
0
    def change_mime(self, bucket, key, mime):
        """修改文件mimeType:

        主动修改指定资源的文件类型,具体规格参考:
        http://developer.qiniu.com/docs/v6/api/reference/rs/chgm.html

        Args:
            bucket: 待操作资源所在空间
            key:    待操作资源文件名
            mime:   待操作文件目标mimeType
        """
        resource = entry(bucket, key)
        encode_mime = urlsafe_base64_encode(mime)
        return self.__rs_do('chgm', resource, 'mime/{0}'.format(encode_mime))
Exemple #10
0
    def persistent_with_pfop(
        self, perstr, fops
    ):  #persistenet operations with fop sentence.the result save as 'origin key+perstr'
        auth = self.q
        bucket_name = self.bucket
        saveas_key = self.key + perstr
        entryuri = settings.QINIU_PRIVATE_BUCKET_NAME + ':' + saveas_key
        entryuri = urlsafe_base64_encode(entryuri)
        fops = fops + '|saveas/{}'.format(entryuri)

        pfop = PersistentFop(auth,
                             bucket_name,
                             pipeline=settings.QINIU_PIPELINE)
        ret, info = pfop.execute(self.key, [fops], 1)
        return [ret, info]
Exemple #11
0
    def fetch(self, url, bucket, key=None):
        """抓取文件:
        从指定URL抓取资源,并将该资源存储到指定空间中,具体规格参考:
        http://developer.qiniu.com/docs/v6/api/reference/rs/fetch.html

        Args:
            url:    指定的URL
            bucket: 目标资源空间
            key:    目标资源文件名

        Returns:
            一个dict变量,成功返回NULL,失败返回{"error": "<errMsg string>"}
            一个ResponseInfo对象
        """
        resource = urlsafe_base64_encode(url)
        to = entry(bucket, key)
        return self.__io_do(bucket, 'fetch', resource, 'to/{0}'.format(to))
    def file_url(self, host):
        url = ['{0}/append/{1}/key/{2}'.format(host, self.offset, self.key)]

        if self.size is None:
            url.append('fsize/{0}'.format(-1))
        else:
            url.append('fsiez/{0}'.format(self.size))

        if self.mime_type:
            url.append('mimeType/{0}'.format(
                urlsafe_base64_encode(self.mime_type)))

        if self.crc:
            url.append('crc32/{0}'.format(self.crc))

        url = '/'.join(url)
        return url
Exemple #13
0
 def persistent_with_pfop_nfop(
         self, perstr,
         fops):  #persistent fop operation with nums of fop execute sentence
     auth = self.q
     bucket_name = self.bucket
     foplist = []
     for i in range(len(fops)):
         saveas_key = self.key + perstr[i]
         entryuri = settings.QINIU_PRIVATE_BUCKET_NAME + ':' + saveas_key
         entryuri = urlsafe_base64_encode(entryuri)
         fop = fops[i] + '|saveas/{}'.format(entryuri)
         foplist.append(fop)
     pfop = PersistentFop(auth,
                          bucket_name,
                          pipeline=settings.QINIU_PIPELINE)
     ret, info = pfop.execute(self.key, foplist, 1)
     return [ret, info]
Exemple #14
0
    def fetch(self, url, bucket, key=None):
        """抓取文件:
        从指定URL抓取资源,并将该资源存储到指定空间中,具体规格参考:
        http://developer.qiniu.com/docs/v6/api/reference/rs/fetch.html

        Args:
            url:    指定的URL
            bucket: 目标资源空间
            key:    目标资源文件名

        Returns:
            一个dict变量,成功返回NULL,失败返回{"error": "<errMsg string>"}
            一个ResponseInfo对象
        """
        resource = urlsafe_base64_encode(url)
        to = entry(bucket, key)
        return self.__io_do(bucket, 'fetch', resource, 'to/{0}'.format(to))
Exemple #15
0
    def change_status(self, bucket, key, status, cond):
        """修改文件的状态

        修改文件的存储类型为可用或禁用:

        Args:
            bucket:         待操作资源所在空间
            key:            待操作资源文件名
            storage_type:   待操作资源存储类型,0为启用,1为禁用
        """
        resource = entry(bucket, key)
        if cond and isinstance(cond, dict):
            condstr = ""
            for k, v in cond.items():
                condstr += "{0}={1}&".format(k, v)
            condstr = urlsafe_base64_encode(condstr[:-1])
            return self.__rs_do('chstatus', resource,
                                'status/{0}'.format(status), 'cond', condstr)
        return self.__rs_do('chstatus', resource, 'status/{0}'.format(status))
Exemple #16
0
    def fetch(self, url, bucket, key=None):
        """抓取文件:
        从指定URL抓取资源,并将该资源存储到指定空间中,具体规格参考:
        http://developer.qiniu.com/docs/v6/api/reference/rs/fetch.html

        Args:
            url:    指定的URL
            bucket: 目标资源空间
            key:    目标资源文件名

        Returns:
            一个dict变量:
                成功 返回{'fsize': <fsize int>, 'hash': <hash string>, 'key': <key string>, 'mimeType': <mimeType string>}
                失败 返回 None
            一个ResponseInfo对象
        """
        resource = urlsafe_base64_encode(url)
        to = entry(bucket, key)
        return self.__io_do(bucket, 'fetch', resource, 'to/{0}'.format(to))
Exemple #17
0
 def block_url_v2(self, host, bucket_name):
     encoded_object_name = urlsafe_base64_encode(
         self.key) if self.key is not None else '~'
     return '{0}/buckets/{1}/objects/{2}/uploads'.format(
         host, bucket_name, encoded_object_name)
Exemple #18
0
 def fetch(self, url, bucket, key):
     resource = urlsafe_base64_encode(url)
     to = entry(bucket, key)
     return self.__io_do('fetch', resource, 'to/{0}'.format(to))
Exemple #19
0
 def fetch(self, url, bucket, key):
     resource = urlsafe_base64_encode(url)
     to = entry(bucket, key)
     return self.__io_do('fetch', resource, 'to/{0}'.format(to))
Exemple #20
0
 def change_mime(self, bucket, key, mime):
     resource = entry(bucket, key)
     encode_mime = urlsafe_base64_encode(mime)
     return self.__rs_do('chgm', resource, 'mime/{0}'.format(encode_mime))
Exemple #21
0
 def change_mime(self, bucket, key, mime):
     resource = entry(bucket, key)
     encode_mime = urlsafe_base64_encode(mime)
     return self.__rs_do('chgm', resource, 'mime/{0}'.format(encode_mime))