4
4
import time
5
5
6
6
from qiniu import config
7
- from qiniu .utils import urlsafe_base64_encode , crc32 , file_crc32 , _file_iter
7
+ from qiniu .utils import urlsafe_base64_encode , crc32 , file_crc32 , _file_iter , rfc_from_timestamp
8
8
from qiniu import http
9
9
from .upload_progress_recorder import UploadProgressRecorder
10
10
@@ -33,7 +33,7 @@ def put_data(
33
33
34
34
def put_file (up_token , key , file_path , params = None ,
35
35
mime_type = 'application/octet-stream' , check_crc = False ,
36
- progress_handler = None , upload_progress_recorder = None ):
36
+ progress_handler = None , upload_progress_recorder = None , keep_last_modified = False ):
37
37
"""上传文件到七牛
38
38
39
39
Args:
@@ -55,19 +55,22 @@ def put_file(up_token, key, file_path, params=None,
55
55
# fname = os.path.basename(file_path)
56
56
with open (file_path , 'rb' ) as input_stream :
57
57
file_name = os .path .basename (file_path )
58
+ modify_time = int (os .path .getmtime (file_path ))
58
59
if size > config ._BLOCK_SIZE * 2 :
59
60
ret , info = put_stream (up_token , key , input_stream , file_name , size , params ,
60
61
mime_type , progress_handler ,
61
62
upload_progress_recorder = upload_progress_recorder ,
62
- modify_time = ( int )( os . path . getmtime ( file_path )) )
63
+ modify_time = modify_time , keep_last_modified = keep_last_modified )
63
64
else :
64
65
crc = file_crc32 (file_path )
65
- ret , info = _form_put (up_token , key , input_stream , params , mime_type , crc , progress_handler , file_name )
66
- # ret, info = _form_put(up_token, key, input_stream, params, mime_type, crc, progress_handler)
66
+ ret , info = _form_put (up_token , key , input_stream , params , mime_type ,
67
+ crc , progress_handler , file_name ,
68
+ modify_time = modify_time , keep_last_modified = keep_last_modified )
67
69
return ret , info
68
70
69
71
70
- def _form_put (up_token , key , data , params , mime_type , crc , progress_handler = None , file_name = None ):
72
+ def _form_put (up_token , key , data , params , mime_type , crc , progress_handler = None , file_name = None , modify_time = None ,
73
+ keep_last_modified = False ):
71
74
fields = {}
72
75
if params :
73
76
for k , v in params .items ():
@@ -85,6 +88,10 @@ def _form_put(up_token, key, data, params, mime_type, crc, progress_handler=None
85
88
if not fname or not fname .strip ():
86
89
fname = 'file_name'
87
90
91
+ # last modify time
92
+ if modify_time and keep_last_modified :
93
+ fields ['x-qn-meta-!Last-Modified' ] = rfc_from_timestamp (modify_time )
94
+
88
95
r , info = http ._post_file (url , data = fields , files = {'file' : (fname , data , mime_type )})
89
96
if r is None and info .need_retry ():
90
97
if info .connect_failed :
@@ -102,9 +109,9 @@ def _form_put(up_token, key, data, params, mime_type, crc, progress_handler=None
102
109
103
110
def put_stream (up_token , key , input_stream , file_name , data_size , params = None ,
104
111
mime_type = None , progress_handler = None ,
105
- upload_progress_recorder = None , modify_time = None ):
112
+ upload_progress_recorder = None , modify_time = None , keep_last_modified = False ):
106
113
task = _Resume (up_token , key , input_stream , data_size , params , mime_type ,
107
- progress_handler , upload_progress_recorder , modify_time , file_name )
114
+ progress_handler , upload_progress_recorder , modify_time , file_name , keep_last_modified )
108
115
return task .upload ()
109
116
110
117
@@ -128,7 +135,7 @@ class _Resume(object):
128
135
"""
129
136
130
137
def __init__ (self , up_token , key , input_stream , data_size , params , mime_type ,
131
- progress_handler , upload_progress_recorder , modify_time , file_name ):
138
+ progress_handler , upload_progress_recorder , modify_time , file_name , keep_last_modified ):
132
139
"""初始化断点续上传"""
133
140
self .up_token = up_token
134
141
self .key = key
@@ -140,6 +147,7 @@ def __init__(self, up_token, key, input_stream, data_size, params, mime_type,
140
147
self .upload_progress_recorder = upload_progress_recorder or UploadProgressRecorder ()
141
148
self .modify_time = modify_time or time .time ()
142
149
self .file_name = file_name
150
+ self .keep_last_modified = keep_last_modified
143
151
# print(self.modify_time)
144
152
# print(modify_time)
145
153
@@ -216,6 +224,11 @@ def file_url(self, host):
216
224
for k , v in self .params .items ():
217
225
url .append ('{0}/{1}' .format (k , urlsafe_base64_encode (v )))
218
226
pass
227
+
228
+ if self .modify_time and self .keep_last_modified :
229
+ url .append (
230
+ "x-qn-meta-!Last-Modified/{0}" .format (urlsafe_base64_encode (rfc_from_timestamp (self .modify_time ))))
231
+
219
232
url = '/' .join (url )
220
233
# print url
221
234
return url
0 commit comments