Я пытаюсь использовать библиотеку запросов в Python для загрузки файла в репозиторий Fedora commons на локальном хосте. Я вполне уверен, что моя основная проблема заключается в непонимании 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)
This will successfully upload a file in the repository, but it will be slightly larger and corrupted after. For example an image that was 6.6kb became 6.75kb and was not openable anymore.
###Extra details:###
Когда я заменяю
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
POST
) или здесь (используя методPUT
). - person Mauro Baraldi   schedule 13.12.2017