Exemplo n.º 1
0
 def make_request(self, method, bucket, key, path_args, headers, s3_object):
     
     calling_format = Utils.get_callingformat_for_bucket(self.calling_format, bucket)
 
     if self.is_secure and not isinstance(calling_format, PathFormat) and bucket.find( "." ) != -1:
         raise Exception("You are making an SSL connection, however, the bucket contains periods and \
                         the wildcard certificate will not match by default. Please consider using HTTP.")
     
     path = calling_format.get_url(self.is_secure, self.server, self.port, bucket, key, path_args)
     connect_server = calling_format.get_server(self.server, bucket)  
     
     if s3_object:
         head = self.add_metadata_headers(self.add_headers(headers, ""), s3_object.metadata)     
     else:
         head = self.add_headers(headers, "")
  
     headerconfig = self.add_auth_headers(head, method, bucket, key, path_args)
     
     if s3_object:
         if s3_object.file_path:
             headerconfig["Content-Length"] = str(os.path.getsize(Utils.decode_utf(s3_object.file_path)))  #需要手动将content-length添加到头信息中
         else:
             headerconfig["Content-Length"] = str(0)
     
     return self.send_request(connect_server, method, path, headerconfig)
Exemplo n.º 2
0
 def create_object(self, bucket, key, s3_object, headers = None):
       
     conn = self.make_request("PUT", bucket, Utils.urlencode(key), None, headers, s3_object) 
      
     CHUNKSIZE = 65563  
     if s3_object.file_path:          
         with open(Utils.decode_utf(s3_object.file_path), 'rb') as f:           
             while True:
                 chunk = f.read(CHUNKSIZE)
                 if not chunk:
                     break
                 conn.send(chunk)
                 
     return conn.getresponse()