如何使用 django-salesforce 获取 Salesforce 附件文件内容?
How to fetch Salesforce Attachment file content with django-salesforce?
我正在开发一个 Django 1.11 应用程序,用作某些 Salesforce 对象的 UI,使用 django-salesforce
与 Salesforce 进行通信。
我必须让用户可以选择从与其联系人相关的 Salesforce 附件对象下载文件。
# Django Attachment model on my_app/models.py
...
class Attachment(models.Model):
parent = models.ForeignKey(Contact, models.DO_NOTHING,
sf_read_only=models.NOT_UPDATEABLE)
name = models.CharField(max_length=255, verbose_name='File Name')
content_type = models.CharField(max_length=120, blank=True, null=True)
body_length = models.IntegerField(sf_read_only=models.READ_ONLY)
body = models.TextField()
...
在此附件模型上,我可以访问 body
字段中文件内容的其余部分 URL,但不能访问实际内容。
有没有一种方法可以从附件中获取文件内容而不必为此实现 OAuth 客户端?
A) 通过 REST API 请求封装在 handle_api_exceptions
from salesforce.backend.driver import handle_api_exceptions
# from salesforce.dbapi.driver import handle_api_exceptions # can be changed soon to this
from django.db import connections
session = connections['salesforce'].sf_session
rows = Attachment.objects.filter(...)
for row in rows:
url = session.auth.instance_url + row.body
blob = handle_api_exceptions(url, session.get).text
B) 你可以通过
获取SOAP客户端(需要Beatbox)
from salesforce.utils import get_soap_client
import base64
soap = get_soap_client('salesforce')
for ...:
ret = soap.query("SELECT Body FROM Attachment WHERE Id = '...'")
blob = base64.b64decode(ret)[0]['Body'])
有用的相关答案是:
- How to get files from Salesforce using Python
- Uploading Attachments to Salesforce API via Beatbox, Python
编辑 我希望您的意思是用户 = 某些联系人,而不是与具有某种形式的付费许可的 SFDC 对象用户必然相关的联系人。出于安全原因,它们应该只通过您的网站下载,而不是直接下载。任何 OAuth 都不可能改进它。
Salesforce 有一个专用端点来流式传输文件 blob
{{endpoint}}/services/data/v{{version}}/connect/files/{{file_id}}/content
参数:
- 端点:实例URL
- 版本:API版本
- file_id: contentDocument 记录 id
我正在开发一个 Django 1.11 应用程序,用作某些 Salesforce 对象的 UI,使用 django-salesforce
与 Salesforce 进行通信。
我必须让用户可以选择从与其联系人相关的 Salesforce 附件对象下载文件。
# Django Attachment model on my_app/models.py
...
class Attachment(models.Model):
parent = models.ForeignKey(Contact, models.DO_NOTHING,
sf_read_only=models.NOT_UPDATEABLE)
name = models.CharField(max_length=255, verbose_name='File Name')
content_type = models.CharField(max_length=120, blank=True, null=True)
body_length = models.IntegerField(sf_read_only=models.READ_ONLY)
body = models.TextField()
...
在此附件模型上,我可以访问 body
字段中文件内容的其余部分 URL,但不能访问实际内容。
有没有一种方法可以从附件中获取文件内容而不必为此实现 OAuth 客户端?
A) 通过 REST API 请求封装在 handle_api_exceptions
from salesforce.backend.driver import handle_api_exceptions
# from salesforce.dbapi.driver import handle_api_exceptions # can be changed soon to this
from django.db import connections
session = connections['salesforce'].sf_session
rows = Attachment.objects.filter(...)
for row in rows:
url = session.auth.instance_url + row.body
blob = handle_api_exceptions(url, session.get).text
B) 你可以通过
获取SOAP客户端(需要Beatbox)from salesforce.utils import get_soap_client
import base64
soap = get_soap_client('salesforce')
for ...:
ret = soap.query("SELECT Body FROM Attachment WHERE Id = '...'")
blob = base64.b64decode(ret)[0]['Body'])
有用的相关答案是:
- How to get files from Salesforce using Python
- Uploading Attachments to Salesforce API via Beatbox, Python
编辑 我希望您的意思是用户 = 某些联系人,而不是与具有某种形式的付费许可的 SFDC 对象用户必然相关的联系人。出于安全原因,它们应该只通过您的网站下载,而不是直接下载。任何 OAuth 都不可能改进它。
Salesforce 有一个专用端点来流式传输文件 blob
{{endpoint}}/services/data/v{{version}}/connect/files/{{file_id}}/content
参数:
- 端点:实例URL
- 版本:API版本
- file_id: contentDocument 记录 id