Skip to content

Commit 3ac1cf8

Browse files
authored
fix: upload custom vars not work (#449)
1 parent 26ec278 commit 3ac1cf8

File tree

6 files changed

+155
-3
lines changed

6 files changed

+155
-3
lines changed

.github/workflows/ci-test.yml

+1
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ jobs:
5656
QINIU_SECRET_KEY: ${{ secrets.QINIU_SECRET_KEY }}
5757
QINIU_TEST_BUCKET: ${{ secrets.QINIU_TEST_BUCKET }}
5858
QINIU_TEST_DOMAIN: ${{ secrets.QINIU_TEST_DOMAIN }}
59+
QINIU_UPLOAD_CALLBACK_URL: ${{secrets.QINIU_UPLOAD_CALLBACK_URL}}
5960
QINIU_TEST_ENV: "travis"
6061
MOCK_SERVER_ADDRESS: "http://127.0.0.1:9000"
6162
PYTHONPATH: "$PYTHONPATH:."

CHANGELOG.md

+3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
# Changelog
2+
## 7.13.2(2024-05-28)
3+
* 对象存储,修复上传回调设置自定义变量失效(v7.12.0 引入)
4+
25
## 7.13.1(2024-02-21)
36
* 对象存储,修复上传部分配置项的兼容
47
* 对象存储,添加上传策略部分字段

qiniu/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
# flake8: noqa
1111

12-
__version__ = '7.13.1'
12+
__version__ = '7.13.2'
1313

1414
from .auth import Auth, QiniuMacAuth
1515

qiniu/services/storage/uploader.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ def _form_put(
134134
modify_time=modify_time,
135135
mime_type=mime_type,
136136
metadata=metadata,
137-
params=params,
137+
custom_vars=params,
138138
crc32_int=crc,
139139
up_token=up_token
140140
)
@@ -194,6 +194,6 @@ def put_stream(
194194
modify_time=modify_time,
195195
mime_type=mime_type,
196196
metadata=metadata,
197-
params=params,
197+
custom_vars=params,
198198
up_token=up_token
199199
)

tests/cases/conftest.py

+5
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ def bucket_name():
2323
yield os.getenv('QINIU_TEST_BUCKET')
2424

2525

26+
@pytest.fixture(scope='session')
27+
def upload_callback_url():
28+
yield os.getenv('QINIU_UPLOAD_CALLBACK_URL')
29+
30+
2631
@pytest.fixture(scope='session')
2732
def qn_auth(access_key, secret_key):
2833
yield Auth(access_key, secret_key)

tests/cases/test_services/test_storage/test_uploader.py

+143
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,68 @@ def test_put_data_with_metadata(
282282
assert ret['x-qn-meta']['name'] == 'qiniu'
283283
assert ret['x-qn-meta']['age'] == '18'
284284

285+
@pytest.mark.parametrize('temp_file', [64 * KB], indirect=True)
286+
def test_put_file_with_callback(
287+
self,
288+
qn_auth,
289+
bucket_name,
290+
temp_file,
291+
commonly_options,
292+
bucket_manager,
293+
upload_callback_url
294+
):
295+
key = 'test_file_with_callback'
296+
policy = {
297+
'callbackUrl': upload_callback_url,
298+
'callbackBody': '{"custom_vars":{"a":$(x:a)},"key":$(key),"hash":$(etag)}',
299+
'callbackBodyType': 'application/json',
300+
}
301+
token = qn_auth.upload_token(bucket_name, key, policy=policy)
302+
ret, info = put_file(
303+
token,
304+
key,
305+
temp_file,
306+
metadata=commonly_options.metadata,
307+
params=commonly_options.params,
308+
)
309+
assert ret['key'] == key
310+
assert ret['hash'] == etag(temp_file)
311+
assert ret['custom_vars']['a'] == 'a'
312+
ret, info = bucket_manager.stat(bucket_name, key)
313+
assert 'x-qn-meta' in ret
314+
assert ret['x-qn-meta']['name'] == 'qiniu'
315+
assert ret['x-qn-meta']['age'] == '18'
316+
317+
def test_put_data_with_callback(
318+
self,
319+
qn_auth,
320+
bucket_name,
321+
commonly_options,
322+
bucket_manager,
323+
upload_callback_url
324+
):
325+
key = 'put_data_with_metadata'
326+
data = 'hello metadata!'
327+
policy = {
328+
'callbackUrl': upload_callback_url,
329+
'callbackBody': '{"custom_vars":{"a":$(x:a)},"key":$(key),"hash":$(etag)}',
330+
'callbackBodyType': 'application/json',
331+
}
332+
token = qn_auth.upload_token(bucket_name, key, policy=policy)
333+
ret, info = put_data(
334+
token,
335+
key,
336+
data,
337+
metadata=commonly_options.metadata,
338+
params=commonly_options.params
339+
)
340+
assert ret['key'] == key
341+
assert ret['custom_vars']['a'] == 'a'
342+
ret, info = bucket_manager.stat(bucket_name, key)
343+
assert 'x-qn-meta' in ret
344+
assert ret['x-qn-meta']['name'] == 'qiniu'
345+
assert ret['x-qn-meta']['age'] == '18'
346+
285347

286348
class TestResumableUploader:
287349
@pytest.mark.parametrize('temp_file', [64 * KB], indirect=True)
@@ -544,6 +606,87 @@ def test_put_stream_v2_with_metadata(
544606
assert ret['x-qn-meta']['name'] == 'qiniu'
545607
assert ret['x-qn-meta']['age'] == '18'
546608

609+
@pytest.mark.parametrize('temp_file', [64 * KB], indirect=True)
610+
def test_put_stream_with_callback(
611+
self,
612+
qn_auth,
613+
bucket_name,
614+
temp_file,
615+
commonly_options,
616+
bucket_manager,
617+
upload_callback_url
618+
):
619+
key = 'test_put_stream_with_callback'
620+
size = os.stat(temp_file).st_size
621+
with open(temp_file, 'rb') as input_stream:
622+
policy = {
623+
'callbackUrl': upload_callback_url,
624+
'callbackBody': '{"custom_vars":{"a":$(x:a)},"key":$(key),"hash":$(etag)}',
625+
'callbackBodyType': 'application/json',
626+
}
627+
token = qn_auth.upload_token(bucket_name, key, policy=policy)
628+
ret, info = put_stream(
629+
token,
630+
key,
631+
input_stream,
632+
os.path.basename(temp_file),
633+
size,
634+
None,
635+
commonly_options.params,
636+
commonly_options.mime_type,
637+
part_size=None,
638+
version=None,
639+
bucket_name=None,
640+
metadata=commonly_options.metadata
641+
)
642+
assert ret['key'] == key
643+
assert ret['custom_vars']['a'] == 'a'
644+
ret, info = bucket_manager.stat(bucket_name, key)
645+
assert 'x-qn-meta' in ret
646+
assert ret['x-qn-meta']['name'] == 'qiniu'
647+
assert ret['x-qn-meta']['age'] == '18'
648+
649+
@pytest.mark.parametrize('temp_file', [4 * MB + 1], indirect=True)
650+
def test_put_stream_v2_with_callback(
651+
self,
652+
qn_auth,
653+
bucket_name,
654+
temp_file,
655+
commonly_options,
656+
bucket_manager,
657+
upload_callback_url
658+
):
659+
part_size = 4 * MB
660+
key = 'test_put_stream_v2_with_metadata'
661+
size = os.stat(temp_file).st_size
662+
with open(temp_file, 'rb') as input_stream:
663+
policy = {
664+
'callbackUrl': upload_callback_url,
665+
'callbackBody': '{"custom_vars":{"a":$(x:a)},"key":$(key),"hash":$(etag)}',
666+
'callbackBodyType': 'application/json',
667+
}
668+
token = qn_auth.upload_token(bucket_name, key, policy=policy)
669+
ret, info = put_stream(
670+
token,
671+
key,
672+
input_stream,
673+
os.path.basename(temp_file),
674+
size,
675+
None,
676+
commonly_options.params,
677+
commonly_options.mime_type,
678+
part_size=part_size,
679+
version='v2',
680+
bucket_name=bucket_name,
681+
metadata=commonly_options.metadata
682+
)
683+
assert ret['key'] == key
684+
assert ret['custom_vars']['a'] == 'a'
685+
ret, info = bucket_manager.stat(bucket_name, key)
686+
assert 'x-qn-meta' in ret
687+
assert ret['x-qn-meta']['name'] == 'qiniu'
688+
assert ret['x-qn-meta']['age'] == '18'
689+
547690
@pytest.mark.parametrize('temp_file', [30 * MB], indirect=True)
548691
@pytest.mark.parametrize('version', ['v1', 'v2'])
549692
def test_resume_upload(self, bucket_name, qn_auth, temp_file, version):

0 commit comments

Comments
 (0)