我正在尝试使用 Python 中的请求库将文件上传到本地主机上的 Fedora 公共存储库。我相当确定我的主要问题是不理解open()
/read()
以及使用 http 请求发送数据需要做什么。
def postBinary(fileName,dirPath,url):
path = dirPath+'/'+fileName
print('to ' + url + '\n' + path)
openBin = {'file':(fileName,open(path,'rb').read())}
headers = {'Slug': fileName} #not important
r = requests.put(url, files=openBin,headers=headers, auth=HTTPBasicAuth('username', 'pass'))
print(r.text)
print("and the url used:")
print(r.url)
这将成功上传存储库中的文件,但之后文件会稍大并损坏。例如,一个 6.6kb 的图像变成了 6.75kb 并且无法再打开。
那么我应该如何在 python 中使用 put 正确打开和上传文件呢?###额外细节:###
当我替换
files=openBin
为data=openBin
我的字典时,我假设数据是一个字符串。我不知道这些信息是否有用。
"file=FILE_NAME.extension&file=TYPE89a%24%02Q%03%E7%FF%00E%5B%19%FC%.... 文件大小增加到几兆我使用的是专门 put 因为 Fedora RESTful HTTP API 端点说要使用
put
.
以下命令确实有效:
curl -u username:password -H "Content-Type: text/plain" -X PUT -T /path/to/someFile.jpeg http://localhost:8080/fcrepo/rest/someFile.jpeg