使用simple-salesforce python上传多个文件

时间:2016-09-16 10:18:42

标签: python django salesforce simple-salesforce

我开始学习SalesForce并使用django开发应用程序。

我需要协助将文件上传到salesforce,为此,我阅读simple-salesforcethis,以帮助使用rest和SOAP api上传文件。

我的问题是如何使用simple-salesforce上传一个或多个文件?

1 个答案:

答案 0 :(得分:0)

以下是我用于上传文件的代码块。

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初始化返回的实例。由于我的实例使用自定义域,我必须在simple-salesforce中创建自己的函数来处理它;我称之为get_forced_url()。注意:根据您使用的版本[v29.0部分可能会更改],URL可能会有所不同。

然后我设置了我的持票人和标题。

接下来是一个循环,它为地图中的每个附件提交一个新附件,从父ID到我想上传的文件。需要注意的是,附件必须具有父对象,因此您需要知道ParentId。对于每个附件,我将身体空白,为附件创建一个长而短的名称。然后是重要的部分。在附件上,文件的实际数据存储为base-64二进制数组。因此文件必须以二进制形式打开,因此“rb”然后编码为base-64。

一旦文件被解析为base-64二进制文件,我构建了我的json字符串,其中ParentId是父对象的对象ID,Name是短名称,body是base-64编码的数据字符串

然后将文件提交到带有标题和数据的URL。然后我打印响应,以便我可以看到它发生。