我尝试使用文件名作为对象名称将文件上传到GCS。
e.g。 filename是" test",所以对象是" test"。
但有一些文件的文件名不是纯ASCII字符,我会得到例外情况:
Traceback (most recent call last):
File "test_oauth.py", line 303, in <module>
file_upload(sys.argv[2], sys.argv[3])
File "test_oauth.py", line 188, in file_upload
bucket=bucket_name, name=object_name, media_body=media)
File "./package/src/shared/python-lib/apiclient/discovery.py", line 640, in method
File "./package/src/shared/python-lib/apiclient/model.py", line 137, in request
File "./package/src/shared/python-lib/apiclient/model.py", line 171, in _build_query
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 3: ordinal not in range(128)
我认为如果文件名是UTF-8字符串,则会接受对象名称: https://cloud.google.com/storage/docs/bucketnaming
我确信文件名是utf-8编码。
我应该如何处理这种情况?
我不想将文件名转换为其他编码,例如base64。
以下是代码段:
def file_upload(file_name=None, bucket_name=get_bucket_name()):
assert file_name and bucket_name
object_name = get_object_name(file_name)
print '%s: upload file: %s to bucket: %s to object: %s' % (
sys._getframe().f_code.co_name, file_name, bucket_name, object_name)
media = MediaFileUpload(file_name, chunksize=CHUNKSIZE, resumable=True)
service = get_authenticated_service()
print "mimetype: %s" % media.mimetype()
if not media.mimetype():
media = MediaFileUpload(FILE_UPLOAD,
mimetype=DEFAULT_MIMETYPE,
resumable=True)
print 'object_mame: %s' % object_name
request = service.objects().insert(
bucket=bucket_name, name=object_name, media_body=media)
object_name等于filename,我确定系统编码是UTF-8。
谢谢!