Windows上的Boto文件上传到S3失败[错误号:10054]

cdi*_*ddy 4 python amazon-s3 boto

我正试图在Windows 7机器上使用boto将文件上传到S3,但我一直收到错误 [Errno 10054] An existing connection was forcibly closed by the remote host

我与S3交互的代码如下所示

from boto.s3.connection import S3Connection
from boto.s3.key import Key

conn = S3Connection(Access_Key_ID, Secret_Key)
bucket = conn.lookup(bucket_name)

k = Key(bucket)
k.key = 'akeynameformyfile'
k.set_contents_from_filename(source_path_of_file_to_upload)
Run Code Online (Sandbox Code Playgroud)

使用AWS CLI使用以下命令在同一台计算机上上传工作正常

aws s3 cp filename.exe s3://bucketname/ttt
Run Code Online (Sandbox Code Playgroud)

该文件大约200MB

我的操作系统是Windows 7,python正在通过anaconda运行,所有包都是最新的.Boto是2.25版

这段代码在同一网络上的CentOS盒中运行良好.这是一个Windows问题吗?

非常感谢任何帮助!C

下面调试输出

发送:'HEAD/HTTP/1.1\r \n主机:ACCESS_KEY_ID.test7.s3.amazonaws.com\r \n接受 - 编码:identity\r \n日期:2014年5月14日星期三22:44:31 GMT\r \n内容-Length:0\r \n授权:AWS ACCESS_KEY_ID:SOME_STUFF =\r \nUser-Agent:Boto/2.25.0 Python/2.7.5 Windows/7\r \n\r \n'
回复:'HTTP/1.1 307临时重定向\ r \n'
标题:x-amz-request-id:8A3D34FB0E0FD8E4
标题:x-amz-id -2:PwG9yzOVwxy21LmcpQ0jAaMchG0baCrfEhAU9fstlPUI307Qxth32uNAOVv72B2L
标题:位置:https://ACCESS_KEY_ID.test7.s3-ap-southeast-2.amazonaws.com/ header:
Content-Type:application/xml
header:Transfer-Encoding:chunked
header:Date:Wed, 2014年5月14日22:44:31 GMT
标题:服务器:AmazonS3
发送:'HEAD/HTTP/1.1\r \n主机:ACCESS_KEY_ID.test7.s3-ap-southeast-2.amazonaws.com\r \n接受 - 编码:身份\ r \n日期:我们d,2014年5月14日22:44:31 GMT\r \n内容 - 长度:0\r \n授权:AWS ACCESS_KEY_ID:SOME_STUFF =\r \nUser-Ag ent:Boto/2.25.0 Python/2.7.5 Windows/7\r \n\r \n'
回复:'HTTP/1.1 200 OK\r \n'
标题:x-amz-id-2:erataRIpbOrEwOU72VUAqU9AGJ4/kX5z1/UD7rJQy9laKDgOyTyVKABMab8f6wGN
标题:x-amz-request -id:2A7BECC45C9BAE7A
标题:日期:2014年5月14日星期三22:44:33 GMT
标题:Content-Type:application/xml
header:Transfer-Encoding:chunked
header:Server:AmazonS3
发送:'PUT/akeynameformyfile HTTP/1.1\r \n主机:ACCESS_KEY_ID.test7.s3.amazonaws.com\r \nAccept-Encoding:identity\r \nContent -Length:242642944\r \nContent-MD5:xYOiNcyFKGY1Y/HsYwHQeg ==\r \nExpect:100-Continue\r \n日期:2014年5月14日星期三22:44:33 GMT\r \n用户代理:Boto/2.25.0 Python/2.7.5 Windows/7\r \n内容-Type:application/octet-stream\r \n授权:AWS ACCESS_KEY_ID:pWs3KwRv9Q5wDnz4dHD3JwvCy/w =\r \n\r \n'

-------------------------------------------------- -------------------------错误回溯(最近一次调用最后)
in()

 12 k = Key(bucket)                                                                                                            
 13 k.key = 'akeynameformyfile'                                                                                                
Run Code Online (Sandbox Code Playgroud)

---> 14 k.set_contents_from_filename(full_path_of_file_to_upload)
C:\ Users\username\AppData\Local\Continuum\Anaconda\lib\site-packages\boto\s3\key.pyc in set_contents_from_filename(sel f,filename,headers,replace ,cb,num_cb,policy,md5,reduced_redundancy,encrypt_key)
1313 num_cb,policy,md5,1314
reduced_redundancy,

- > 1315 encrypt_key = encrypt_key)
1316
1317 def set_contents_from_string(self,string_data,headers = None,replace = True,
C:\ Users\username\AppData\Local\Continuum\Anaconda\lib\site-packages\boto\s3\key set_contents_from_file中的.pyc(self,fp,headers,replace,cb,num_cb,policy,md5,reduced_redundancy,query_args,encrypt_key,size,rewind)1244
self.send_file(fp,headers = headers,cb = cb,num_cb = num_cb,
1245 query_args = query_args,

- > 1246 chunked_transfer = chunked_transfer,size = size)1247

返回写入的字节数.1248返回self.size

                                                                                                                                C:\Users\username\AppData\Local\Continuum\Anaconda\lib\site-packages\boto\s3\key.pyc
Run Code Online (Sandbox Code Playgroud)

在send_file中(self,fp,headers,cb,num_cb,query_args,chunked_transfer,size)

723         self._send_file_internal(fp, headers=headers, cb=cb, num_cb=num_cb,                                                
724                                  query_args=query_args,                                                                    
Run Code Online (Sandbox Code Playgroud)

- > 725 chunked_transfer = chunked_transfer,size = size)

726                                                                                                                            
727     def _send_file_internal(self, fp, headers=None, cb=None, num_cb=10,                                                    
                                                                                                                                C:\Users\username\AppData\Local\Continuum\Anaconda\lib\site-packages\boto\s3\key.pyc
Run Code Online (Sandbox Code Playgroud)

在_send_file_internal中(self,fp,headers,cb,num_cb,query_args,chunked_transfer,size,hash_algs)

912             headers,                                                                                                       
913             sender=sender,                                                                                                 
Run Code Online (Sandbox Code Playgroud)

- > 914 query_args = query_args
915)
916 self.handle_version_headers(resp,force = True)make
:中的C:\ Users\username\AppData\Local\Continuum\Anaconda\lib\site-packages\boto\s3\connection.pyc (self,meth od,bucket,key,headers,data,query_args,sender,override_num_retries,retry_handler)

631             data, host, auth_path, sender,                                                                                 
632             override_num_retries=override_num_retries,                                                                     
Run Code Online (Sandbox Code Playgroud)

- > 633 retry_handler = retry_handler
634)make
:中的C:\ Users\username\AppData\Local\Continuum\Anaconda\lib\site-packages\boto\connection.pyc(self,method,path,headers,data,host, auth_path,sender,override_num_retries,params,retry_handler)
1028 params,headers,data,host)
1029 return self._mexe(http_request,sender,override_num_retries,

- > 1030 retry_handler = retry_handler)1031
1032 def close(self):

                                                                                                                                C:\Users\username\AppData\Local\Continuum\Anaconda\lib\site-packages\boto\connection.pyc
Run Code Online (Sandbox Code Playgroud)

在_mexe中(self,request,sende r,override_num_retries,retry_handler)

905                 if callable(sender):                                                                                       
906                     response = sender(connection, request.method, request.path,                                         
Run Code Online (Sandbox Code Playgroud)

- > 907 request.body,request.headers)

908                 else:                                                                                                      
909                     connection.request(request.method, request.path,                                                       
                                                                                                                                C:\Users\username\AppData\Local\Continuum\Anaconda\lib\site-packages\boto\s3\key.pyc
Run Code Online (Sandbox Code Playgroud)

in sender(http_conn,方法,路径,数据,标题)

813                     http_conn.send('\r\n')                                                                                 
814                 else:                                                                                                      
Run Code Online (Sandbox Code Playgroud)

- > 815 http_conn.send(块)
816用于消化池中的alg:
817个消化器[alg] .update(块)
C:\ Users\username\AppData\Local\Continuum\Anaconda\lib\httplib.pyc in send(self ,数据)
803 datablock = data.read(blocksize)
804 else:
- > 805 self.sock.sendall(data)
806
807 def _output(self,s):
C:\ Users\username\AppData\Local\Continuum\sendall中的Anaconda\lib\ssl.pyc(self,data,flags)
227 count = 0
228 while(count <amount):
- > 229 v = self.send(data [count:])
230 count + = v
231返回金额
C:\ Users\username\AppData\Local\Continuum\Anaconda\lib\ssl.pyc in send(self,data,flags)
196 while True:
197 try:
- > 198 v = self._sslobj.write(数据)
199除了SSLError,x:
200如果x.args [0] == SSL_ERROR_WANT_READ:
错误:[Errno 10054]现有连接被远程主机强行关闭

cdi*_*ddy 6

@garnaat在上面的评论中提出了一个建议,为我解决了这个问题.谢谢!!出于某种原因,连接到通用端点然后尝试专门上载到ap-southeast-2S3端点失败.但是如果我们使用该connect_to_region函数来启动连接并指定我们想要的端点,那么一切正常!再次感谢,以及下面的工作示例.

from boto.s3 import connect_to_region
from boto.s3.connection import Location
from boto.s3.key import Key

conn = connect_to_region(Location.APSoutheast2,
                         aws_access_key_id=conf.Access_Key_ID,
                         aws_secret_access_key=conf.Secret_Key)
bucket = conn.lookup(bucket_name) # bucket is located in Location.APSoutheast2

k = Key(bucket)
k.key = 'akeynameformyfile'
k.set_contents_from_filename(source_path_of_file_to_upload)
Run Code Online (Sandbox Code Playgroud)