正在将带有 python 的文件上传到 Bottle 服务器

Uploading file with python to bottle server

我在同一网络中有两台计算机,我正尝试使用 python 将文件从一台计算机传递到另一台计算机(在更大项目的上下文中)。

服务器端我有以下 bottle 脚本:

import bottle
import json

@bottle.hook('after_request')
def enable_cors():
    """
    You need to add some headers to each request.
    Don't use the wildcard '*' for Access-Control-Allow-Origin in production.
    """
    bottle.response.headers['Access-Control-Allow-Origin']  = '*'
    bottle.response.headers['Access-Control-Allow-Methods'] = 'PUT, GET, POST, DELETE, OPTIONS'
    bottle.response.headers['Access-Control-Allow-Headers'] = 'Origin, Accept, Content-Type, X-Requested-With, X-CSRF-Token'

# LANDING (IT IS NOT REALLY NEEDED JUST TO CHECK STUFF)
@bottle.route('/', method='GET')
def root():
    return {
        'api': 'api/'
    }

@bottle.route('/api', method='POST')
def upload():
    upload = bottle.request.files.get('file')
    print upload.filename
    upload.save('input.txt')

if __name__ == '__main__':
    bottle.run(host='0.0.0.0', port=8080, debug=True)

客户端我正在尝试通过请求库发送文件,例如:

import sys
import requests

r = requests.post('http://ip:port/api/', files={'file': open(sys.argv[1], 'rb')})
print r

ipport对应其各自的值)。

我收到此错误,但我不确定如何处理。

Traceback (most recent call last):
  File "loopmatch.py", line 4, in <module>
    r = requests.post('http://ip:port/api/', files={'file': open(sys.argv[1], 'rb')})
  File "/usr/local/lib/python2.7/site-packages/requests/api.py", line 111, in post
    return request('post', url, data=data, json=json, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/requests/api.py", line 57, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/requests/sessions.py", line 475, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/lib/python2.7/site-packages/requests/sessions.py", line 585, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/requests/adapters.py", line 453, in send
    raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', error(32, 'Broken pipe'))

任何帮助将不胜感激。
谢谢!

所以...这件事很愚蠢...只是把答案留在这里以防其他人犯下这个愚蠢的错误...

bottle.routerequests.url需要完全匹配.在可能的情况下,routeapiurlapi/... 这是为什么他们不工作...

需要同时移动到 api/api