Как написать код Python для загрузки файла с использованием REST? - PullRequest
0 голосов
/ 19 апреля 2019

У меня есть команда curl ниже, и мне нужно написать метод для этого. Команда CURL:

curl -X POST "https://example.com:8443/api/rest/abc_service/123/upload/passwd" -H "accept: application/json" -H "Content-Type: multipart/form-data" -F "body=@abhifile.txt;type=text/plain"

Я написал ниже метод для того же, но он не работает. Код:

def upload_passwd(self):
    files = {'filename': '/root/Desktop/vdm/abhifile.txt'}
    header = {
    'Content-Type': "multipart/form-data"
    }
    self._request.headers.update(header)
    response = self._request.post(operation='upload/passwd', 
    object_id=self.object_id, files=files)

REST-ответ, который я получаю с кодом выше:

Предоставленный класс ABC не имеет конструктора JsonObject или конструктора, аннотированного @ ConstructorProperties, который мог бы десериализовать объект JSON

Я также пытался выполнить операцию открытия файла с изменением кода ниже:

def upload_passwd(self):
        f = open('/root/Desktop/vdm/abhifile.txt', 'rb')

        header = {
            'Content-Type': "multipart/form-data"
        }
        self._request.headers.update(header)
        response = self._request.post(operation='upload/passwd', object_id=self.object_id,
                                      data=f)

В приведенном выше случае я получаю сообщение об ошибке при открытии файла:

ValueError: операция ввода-вывода для закрытого файла

1 Ответ

0 голосов
/ 19 апреля 2019

Вы передаете строку с ключом filename, а не передаете содержимое файла.

def upload_passwd(self):
    files = {'filename': open('/root/Desktop/vdm/abhifile.txt','rb')}
    header = {
    'Content-Type': "multipart/form-data"
    }
    self._request.headers.update(header)
    response = self._request.post(operation='upload/passwd', 
    object_id=self.object_id, files=files)
...