全部产品
Search
文档中心

Object Storage Service:FAQ (Python SDK V1)

更新时间:Nov 29, 2025

Topik ini menjelaskan masalah umum dan solusinya untuk kit pengembangan perangkat lunak (SDK) Python Object Storage Service (OSS).

Unggah multipart gagal saat menggunakan SDK Python OSS

Solusi:

  • Pastikan Anda mengunggah objek langsung ke OSS atau melalui proxy, seperti Content Delivery Network (CDN). Jika Anda mengunggah ke OSS melalui CDN, konfigurasikan header HTTP lintas domain di OSS, seperti Access-Control-Allow-Origin, Access-Control-Allow-Methods, dan Access-Control-Allow-Headers, serta pastikan ETag diekspos. Untuk informasi selengkapnya, lihat PutBucketCors.

  • Jika unggah gagal karena timeout jaringan, gunakan unggah yang dapat dilanjutkan (resumable upload) alih-alih unggah standar. Unggah yang dapat dilanjutkan mendukung unggahan paralel dan ukuran bagian kustom. Jika terjadi pengecualian (exception), periksa dan analisis pesan exception dari SDK.

  • Bersihkan fragmen dari unggahan yang gagal, lalu coba unggah ulang.

Jika solusi di atas tidak menyelesaikan masalah, berikan informasi berikut kepada Alibaba Cloud:

  • requestID dari exception yang dikembalikan oleh SDK.

  • Jalankan tcpdump pada client, eksekusi ulang kode unggah, lalu simpan paket yang ditangkap.

    tcpdump -i <network_interface_name> -s0 host <oss_domain_name> -w failed.pcap

ossutil jauh lebih cepat dalam unggah dan unduh dibandingkan SDK Python pada mesin yang sama

  • Penyebab

    Tool ossutil dikembangkan berdasarkan Go SDK dan menawarkan kinerja unggah konkuren yang lebih baik. Jika SDK Python jauh lebih lambat daripada ossutil dalam unggah dan unduh, hal ini biasanya disebabkan oleh crcmod yang tidak terinstal dengan benar.

  • Solusi

    Untuk informasi selengkapnya tentang cara menginstal crcmod, lihat Instal SDK Python.

Unggahan multipart berhasil di CentOS tetapi mengembalikan error 403 di Ubuntu

Anda dapat menjalankan tcpdump pada client untuk menangkap paket, lalu periksa pesan TCP guna menentukan apakah informasi header yang salah menyebabkan ketidaksesuaian antara signature yang dihitung oleh client dan signature di sisi server.

POST /ttsservice%2Fpasswd?uploadId=D468E486D1D94D90A1AB8885A4E32AE0 HTTP/1.1
Host: rokid.oss-cn-hangzhou.aliyuncs.com
Accept-Encoding: identity
Accept: text/html
Content-Length: 137
date: Sat, 29 Dec 2018 07:32:34 GMT
authorization: OSS LTAI****************:r2kp*****************
Content-Type: application/x-www-form-urlencoded
User-Agent: aliyun-sdk-python/2.6.0(Linux/4.4.0-31-generic/x86_64;3.4.3)

<CompleteMultipartUpload><Part><PartNumber>1</PartNumber><ETag>"3195544E19D99658706D5****"</ETag></Part></CompleteMultipartUpload>HTTP/1.1 403 Forbidden

Server: AliyunOSS
Date: Sat, 29 Dec 2018 07:33:43 GMT
Content-Type: application/xml
Content-Length: 1122
Connection: keep-alive
x-oss-request-id: 5C2723573183****
x-oss-server-time: 0

<?xml version="1.0" encoding="UTF-8"?>
<Error>
 <Code>SignatureDoesNotMatch</Code>
 <Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>
 <RequestId> 5C2723573183A12D </RequestId>
 <HostId>rokid.oss-cn-hangzhou.aliyuncs.com</HostId>
 <OSSAccessKeyId>LTAI****************</OSSAccessKeyId>
 <SignatureProvided>r2kp*****************</SignatureProvided>
 <StringToSign>POST
application/x-www-form-urlencoded
Sat, 29 Dec 2018 07:32:34 GMT
/rokid/ttsservice/passwd?uploadId=D468E486D1D94D90A1AB8885A4E3****</StringToSign>
 <StringToSignBytes>50 4F 53 54 0A 0A 61 70 70 6C 69 63 61 74 69 6F 6E 2F 78 2D 77 77 77 2D 66 6F 72 6D 2D 75 72 6C 65 6E 63 6F 64 65 64 0A 53 61 74 2C 20 32 39 20 44 65 63 20 32 30 31 38 20 30 37 3A 33 32 3A 33 34 20 47 4D 54 0A 2F 72 6F 6B 69 64 2F 74 74 73 73 65 72 76 69 63 65 2F 70 61 73 73 77 64 3F 75 70 6C 6F 61 64 49 64 3D 44 34 36 38 45 34 38 36 44 31 44 39 34 44 39 30 41 31 41 42 38 38 38 35 41 34 45 33 32 41 45 30 </StringToSignBytes>
</Error>

Jika signature yang diterima server tidak sesuai dengan signature yang dihitung oleh client, konten permintaan mungkin telah dimodifikasi. Gunakan HTTPS untuk mengunggah objek.

Tambahkan informasi header permintaan dari paket yang ditangkap ke skrip berikut, lalu bandingkan hasilnya dengan signature yang dihasilkan oleh SDK.

import base64
import hmac
import sha
mac = hmac.new("<Secretkey>","POST\n\napplication/x-www-form-urlencoded\nSat, 29 Dec 2018 07:32:34 GMT\n/rokid/ttsservice/passwd?uploadId=D468E486D1D94D90A1AB8885A4E3****", sha)
Signature = base64.b64encode(mac.digest())
print(Signature)

Jika signature dari skrip sesuai dengan yang berasal dari data tangkapan, perhitungan SDK sudah benar. Jika tidak sesuai, hash MD5 mungkin berbeda akibat masalah kompatibilitas kompilasi SDK pada platform Ubuntu.

Error saat mengimpor TensorFlow dalam aplikasi Python multi-threaded di macOS

Saat Python berjalan di lingkungan multi-threaded, error berikut dilaporkan:

objc[2483]: +[__NSPlaceholderDate initialize] may have been in progress in another thread when fork() was called.
objc[2483]: +[__NSPlaceholderDate initialize] may have been in progress in another thread when fork() was called. We cannot safely call it or ignore it in the fork() child process. Crashing instead. Set a breakpoint on objc_initializeAfterForkError to debug.

Solusi:

Tambahkan variabel lingkungan OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES, seperti yang ditunjukkan pada gambar berikut:fig_python_107749_02

Untuk informasi selengkapnya, lihat Objective-C and fork() in macOS 10.13.

Cara menambahkan kebijakan retry

SDK Python tidak memiliki mekanisme retry bawaan. Permintaan bisa gagal dalam kondisi jaringan yang buruk. Dalam kasus ini, Anda dapat menambahkan kebijakan retry ke kode Anda dengan merujuk pada contoh berikut.

def test_get_object():
    MAX_RETRIES = 3
    retry_count = 0
    while True:
        try:
            retry_count += 1
            # yourObjectName menentukan path lengkap file OSS, tanpa nama bucket. Contohnya: abc/efg/example.jpg.
            # yourFileName menentukan path lengkap file lokal tempat Anda ingin mengunduh objek tersebut. Contohnya: /users/local/example.jpg.
            bucket.get_object_to_file("yourObjectName", "yourFileName")
            break
        except Exception:
            if retry_count >= MAX_RETRIES:
                raise

Apa yang harus dilakukan jika mode ekstensi C crcmod gagal diinstal pada beberapa sistem operasi

Jika mode ekstensi C crcmod tidak dapat diinstal dengan sukses pada sistem operasi Anda, Anda dapat menonaktifkan pemeriksaan redundansi siklik 64-bit (CRC-64). Untuk informasi selengkapnya, lihat Nonaktifkan validasi data CRC-64.

Cara memastikan URL yang ditandatangani yang dihasilkan dimulai dengan https

Untuk memastikan bahwa URL yang ditandatangani yang dihasilkan dimulai dengan https, atur endpoint ke alamat yang dimulai dengan https saat melakukan inisialisasi SDK, seperti https://oss-cn-hangzhou.aliyuncs.com.

Cara menggunakan instans bucket di lingkungan multi-proses

Instans bucket harus dibuat setelah inisialisasi multi-proses selesai.