Skip to content

Commit f66ce91

Browse files
authored
Merge pull request #395 from qiniu/enhance
Enhance
2 parents 5bc80ba + 627188e commit f66ce91

File tree

4 files changed

+31
-3
lines changed

4 files changed

+31
-3
lines changed

qiniu/auth.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# -*- coding: utf-8 -*-
2-
2+
import base64
33
import hmac
44
import time
55
from hashlib import sha1
@@ -158,6 +158,16 @@ def upload_token(
158158

159159
return self.__upload_token(args)
160160

161+
@staticmethod
162+
def up_token_decode(up_token):
163+
up_token_list = up_token.split(':')
164+
ak = up_token_list[0]
165+
sign = base64.urlsafe_b64decode(up_token_list[1])
166+
decode_policy = base64.urlsafe_b64decode(up_token_list[2])
167+
decode_policy = decode_policy.decode('utf-8')
168+
dict_policy = json.loads(decode_policy)
169+
return ak, sign, dict_policy
170+
161171
def __upload_token(self, policy):
162172
data = json.dumps(policy, separators=(',', ':'))
163173
return self.token_with_data(data)

qiniu/services/storage/uploader.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
# -*- coding: utf-8 -*-
2-
32
import hashlib
43
import json
54
import os
65
import time
76

8-
from qiniu import config
7+
from qiniu import config, Auth
98
from qiniu.utils import urlsafe_base64_encode, crc32, file_crc32, _file_iter, rfc_from_timestamp
109
from qiniu import http
1110
from .upload_progress_recorder import UploadProgressRecorder
@@ -239,6 +238,7 @@ def upload(self):
239238
self.recovery_index = 1
240239
self.expiredAt = None
241240
self.uploadId = None
241+
self.get_bucket()
242242
host = self.get_up_host()
243243
if self.version == 'v1':
244244
offset = self.recovery_from_record()
@@ -388,3 +388,9 @@ def put(self, url, data, headers):
388388

389389
def get_parts(self, block_status):
390390
return sorted(block_status, key=lambda i: i['partNumber'])
391+
392+
def get_bucket(self):
393+
if self.bucket_name is None or self.bucket_name == '':
394+
_, _, policy = Auth.up_token_decode(self.up_token)
395+
if policy != {}:
396+
self.bucket_name = policy['scope'].split(':')[0]

qiniu/utils.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ def _file_iter(input_stream, size, offset=0):
9090
while d:
9191
yield d
9292
d = input_stream.read(size)
93+
input_stream.seek(0)
9394

9495

9596
def _sha1(data):

test_qiniu.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -390,6 +390,17 @@ def test_put_stream(self):
390390
self.mime_type, part_size=None, version=None, bucket_name=None)
391391
assert ret['key'] == key
392392

393+
def test_put_stream_v2_without_bucket_name(self):
394+
localfile = __file__
395+
key = 'test_file_r'
396+
size = os.stat(localfile).st_size
397+
set_default(default_zone=Zone('http://upload.qiniup.com'))
398+
with open(localfile, 'rb') as input_stream:
399+
token = self.q.upload_token(bucket_name, key)
400+
ret, info = put_stream(token, key, input_stream, os.path.basename(__file__), size, hostscache_dir,
401+
self.params,
402+
self.mime_type, part_size=1024 * 1024 * 10, version='v2')
403+
assert ret['key'] == key
393404

394405
def test_put_2m_stream_v2(self):
395406
localfile = create_temp_file(2 * 1024 * 1024 + 1)

0 commit comments

Comments
 (0)