Skip to content

Instantly share code, notes, and snippets.

@wadewegner
Last active October 20, 2022 05:59
Show Gist options
  • Save wadewegner/df609a495df2e4bd7a07 to your computer and use it in GitHub Desktop.
Save wadewegner/df609a495df2e4bd7a07 to your computer and use it in GitHub Desktop.
Upload attachment to Salesforce using Python
import requests
import base64
import json
from simple_salesforce import Salesforce
userName = ''
password = ''
securityToken = ''
instance = ''
sf = Salesforce(username=userName, password=password, security_token=securityToken)
sessionId = sf.session_id
account = sf.query("SELECT Id, Name FROM Account LIMIT 1")
accountId = account["records"][0]["Id"]
body = ""
with open("text.txt", "r") as f:
body = base64.b64encode(f.read())
response = requests.post('https://%s.salesforce.com/services/data/v29.0/sobjects/Attachment/' % instance,
headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer %s' % sessionId },
data = json.dumps({
'ParentId': accountId,
'Name': 'rest_test.txt',
'body': body
})
)
print response.text
import beatbox
import base64
userName = ''
securityToken = ''
password = '' + securityToken
svc = beatbox.PythonClient()
svc.login(userName, password)
body = ""
with open("text.txt", "rb") as f:
body = base64.b64encode(f.read())
res = svc.query("SELECT Id, Name FROM Account LIMIT 1")
accountId = res[0].Id
print res[0].Name
update_dict = {
'type' : 'Attachment',
'ParentId' : accountId,
'Name' : 'text.txt',
'Body' : body
}
results = svc.create(update_dict)
print results
@ajeeb-kp-keleno
Copy link

ajeeb-kp-keleno commented May 15, 2020

IMHO,

	body = base64.b64encode(f.read())

Should be

	body = base64.b64encode(f.read()).decode('utf-8')

for python3 (ie. b64encode method returns a byte in python3, so convert that into a string).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment