Вот код, который я использую для загрузки файлов.
def load_attachments(sf, new_attachments):
'''
Method to attach the Template from the Parent Case to each of the children.
@param: new_attachments the dictionary of child cases to the file name of the template
'''
url = "https://" + sf.get_forced_url() + ".my.salesforce.com/services/data/v29.0/sobjects/Attachment/"
bearer = "Bearer " + sf.get_session_id()
header = {'Content-Type': 'application/json', 'Authorization': bearer}
for each in new_attachments:
body = ""
long_name = str(new_attachments[each]).split(sep="\\")
short_name = long_name[len(long_name) - 1]
with open(new_attachments[each], "rb") as upload:
body = base64.b64encode(upload.read())
data = json.dumps({
'ParentId': each,
'Name': short_name,
'body': body
})
response = requests.post(url, headers=header, data=data)
print(response.text)
В принципе, чтобы отправить файл, вам необходимо использовать модуль запросов и отправить файл через почтовую транзакцию. Для транзакции post требуется URL-адрес, на который отправляется запрос, информация заголовка и данные.
Здесь sf - это экземпляр, возвращаемый простой инициализацией с помощью функции simple-salesforce. Поскольку мой экземпляр использует пользовательские домены, мне пришлось создать свою собственную функцию в простом-salesforce, чтобы справиться с этим; Я называю это get_forced_url(). Примечание. URL-адрес может отличаться для вас в зависимости от того, какую версию вы используете [часть v29.0 может измениться].
Затем я установил свой носитель и заголовок.
Следующая вещь представляет собой цикл, который представляет новое вложение для каждого вложения на карте из родительского идентификатора в файл, который я хочу загрузить. Важно отметить, что вложения должны иметь родительский объект, поэтому вам необходимо знать ParentId. Для каждого приложения я затушевываю тело, создаю длинное и короткое имя для вложения. Тогда важная часть. В вложениях фактические данные файла хранятся в виде двоичного массива base-64. Таким образом, файл должен быть открыт как двоичный, следовательно, «rb», а затем закодирован на base-64.
После того, как файл был разобран на двоичный код base-64, я создаю строку json, где ParentId является идентификатором объекта родительского объекта, Имя - это короткое имя, а тело - это строка с кодировкой base-64 данные.
Затем файл отправляется на URL с заголовками и данными. Затем я печатаю ответ, чтобы посмотреть, как это происходит.