@@ -97,6 +97,31 @@ static bool make_md5_from_string(const char* pstr, string& md5)
9797 return true ;
9898}
9999
100+ struct curl_slist * curl_slist_remove (struct curl_slist * list, const char * key) {
101+ struct curl_slist * current = list;
102+ struct curl_slist * prev = NULL ;
103+
104+ // 遍历链表
105+ while (current != NULL ) {
106+ if (strncmp (current->data , key, strlen (key)) == 0 ) {
107+ // 找到匹配节点
108+ if (prev == NULL ) {
109+ // 删除头节点
110+ list = current->next ;
111+ } else {
112+ // 删除中间或尾部节点
113+ prev->next = current->next ;
114+ }
115+ // 释放当前节点内存
116+ free (current->data );
117+ free (current);
118+ break ;
119+ }
120+ prev = current;
121+ current = current->next ;
122+ }
123+ return list;
124+ }
100125
101126// -------------------------------------------------------------------
102127// Class BodyData
@@ -2391,6 +2416,7 @@ int S3fsCurl::PutHeadRequest(const char* tpath, headers_t& meta, bool is_copy)
23912416 requestHeaders = curl_slist_sort_insert (requestHeaders, " Host" , host.c_str ());
23922417 requestHeaders = curl_slist_sort_insert (requestHeaders, " Date" , date.c_str ());
23932418 requestHeaders = curl_slist_sort_insert (requestHeaders, " Content-Type" , ContentType.c_str ());
2419+ requestHeaders = curl_slist_sort_insert (requestHeaders, " Content-Length" , " 0" );
23942420
23952421 if (!S3fsCurl::IsPublicBucket ()){
23962422 string Signature = CalcSignature (" PUT" , " " , ContentType, date, resource, " " );
@@ -2489,6 +2515,11 @@ int S3fsCurl::PutRequest(const char* tpath, headers_t& meta, int fd)
24892515 requestHeaders = curl_slist_sort_insert (requestHeaders, " Date" , date.c_str ());
24902516 requestHeaders = curl_slist_sort_insert (requestHeaders, " Content-Type" , ContentType.c_str ());
24912517
2518+ if (file) {
2519+ requestHeaders = curl_slist_sort_insert (requestHeaders, " Content-Length" , str (st.st_size ).c_str ());
2520+ } else {
2521+ requestHeaders = curl_slist_sort_insert (requestHeaders, " Content-Length" , " 0" );
2522+ }
24922523 if (!S3fsCurl::IsPublicBucket ()){
24932524 string Signature = CalcSignature (" PUT" , strMD5, ContentType, date, resource, " " );
24942525 requestHeaders = curl_slist_sort_insert (requestHeaders, " Authorization" ,Signature.c_str ());
@@ -2761,7 +2792,7 @@ int S3fsCurl::PreMultipartPostRequest(const char* tpath, headers_t& meta, string
27612792 requestHeaders = curl_slist_sort_insert (requestHeaders, " Host" , host.c_str ());
27622793 requestHeaders = curl_slist_sort_insert (requestHeaders, " Date" , date.c_str ());
27632794 requestHeaders = curl_slist_sort_insert (requestHeaders, " Accept" , NULL );
2764- requestHeaders = curl_slist_sort_insert (requestHeaders, " Content-Length" , NULL );
2795+ requestHeaders = curl_slist_sort_insert (requestHeaders, " Content-Length" , " 0 " );
27652796 requestHeaders = curl_slist_sort_insert (requestHeaders, " Content-Type" , contype.c_str ());
27662797
27672798 if (!S3fsCurl::IsPublicBucket ()){
@@ -2852,6 +2883,7 @@ int S3fsCurl::CompleteMultipartPostRequest(const char* tpath, string& upload_id,
28522883 requestHeaders = curl_slist_sort_insert (requestHeaders, " Date" , date.c_str ());
28532884 requestHeaders = curl_slist_sort_insert (requestHeaders, " Accept" , NULL );
28542885 requestHeaders = curl_slist_sort_insert (requestHeaders, " Content-Type" , contype.c_str ());
2886+ requestHeaders = curl_slist_sort_insert (requestHeaders, " Content-Length" , str (postdata_remaining).c_str ());
28552887
28562888 if (!S3fsCurl::IsPublicBucket ()){
28572889 string Signature = CalcSignature (" POST" , " " , contype, date, resource, query_string);
@@ -3046,6 +3078,7 @@ int S3fsCurl::UploadMultipartPostSetup(const char* tpath, int part_num, string&
30463078 delete[] md5base64p;
30473079 delete[] md5raw;
30483080 }
3081+ requestHeaders = curl_slist_sort_insert (requestHeaders, " Content-Length" , str (partdata.size ).c_str ());
30493082
30503083 if (!S3fsCurl::IsPublicBucket ()){
30513084 string Signature = CalcSignature (" PUT" , strMD5, " " , date, resource, request_uri);
@@ -3154,6 +3187,7 @@ int S3fsCurl::CopyMultipartPostRequest(const char* from, const char* to, int par
31543187 requestHeaders = curl_slist_sort_insert (requestHeaders, " Host" , host.c_str ());
31553188 requestHeaders = curl_slist_sort_insert (requestHeaders, " Date" , date.c_str ());
31563189 requestHeaders = curl_slist_sort_insert (requestHeaders, " Content-Type" , ContentType.c_str ());
3190+ requestHeaders = curl_slist_sort_insert (requestHeaders, " Content-Length" , " 0" );
31573191
31583192 if (!S3fsCurl::IsPublicBucket ()){
31593193 string Signature = CalcSignature (" PUT" , " " , ContentType, date, resource, urlargs);
0 commit comments