簡體   English   中英

如何使用 Apex Aura 方法通過 Lightning 組件將大文件 (>6MB) 上傳到 SalesForce

[英]How To Upload A Large File (>6MB) To SalesForce Through A Lightning Component Using Apex Aura Methods

我的目標是獲取用戶通過 Lightning 組件附加的文件,並創建包含數據的文檔 object。

到目前為止,我已經通過將上傳的數據分塊為 1MB 的塊來克服請求大小限制。 當 Apex Aura 方法接收到這些數據塊時,它將創建一個新文檔(如果它是第一個塊),或者將檢索現有文檔並將新塊添加到末尾。

數據接收到 Base64 編碼,然后在服務器端解碼。

由於文檔數據存儲為 Blob,原始文件內容將作為字符串讀取,然后附加接收到的塊。 然后將新內容轉換回 Blob 以存儲在 ContentVersion object 中。

我遇到的問題是 Apex 中的字符串最大長度為 6,000,000 左右。 每當文件大小超過 6MB 時,在串聯過程中就會達到此限制,並會導致文件上傳停止。

我試圖通過僅在需要連接時將 Blob 轉換為 String 來避免此限制(如此處建議的https://developer.salesforce.com/forums/?id=906F00000008w9hIAA ),但這沒有用。 我猜它已被修補,因為它在技術上仍在分配一個大於限制的字符串。

到目前為止,附加時代碼非常簡單:

ContentVersion originalDocument = [SELECT Id, VersionData FROM ContentVersion WHERE Id =: <existing_file_id> LIMIT 1];

Blob originalData = originalDocument.VersionData;
Blob appendedData = EncodingUtil.base64Decode(<base_64_data_input>);
Blob newData = Blob.valueOf(originalData.toString() + appendedData.toString());
        
originalDocument.VersionData = newData;

你會很難過。

您可以嘗試將連接卸載到異步進程 (@future/Queueable/Schedulable/Batchable),它們將擁有 12MB RAM 而不是 6MB。可以為您爭取一些時間。

您可以嘗試通過嵌入 iframe(Visualforce 或 lightning:container 標簽?或者可能是“畫布應用程序”)來作弊,它會抓取您的文件並執行一些手動操作 JavaScript 魔術調用正常 REST API 以進行文檔上傳: 881056335271889637488://developer.48 .com/docs/atlas.en-us.api_rest.meta/api_rest/dome_sobject_insert_update_blob.htm (最后一個代碼片段是關於多個文檔的)。 也許jsforce

您能否將它上傳到其他地方(SharePoint?Heroku?)並讓該系統調用 SF 以推送它們(無 Apex = 無堆大小限制)。 或者甚至查看“文件連接”。

可以發個email帶附件嗎? 粗略但如果您編寫自定義電子郵件轉個案處理程序 class,您將擁有 36 MB 的 RAM。

您寫道“我們需要上傳多個文件,並且提供的多文件上傳組件不支持所有擴展名”。 這可能是由這些引起的:

  • 在體驗生成器站點中,允許的文件大小限制和類型遵循站點文件審核確定的設置。
  • lightning-file-upload 不支持在 Android 設備上一次上傳多個文件。
  • 如果為您的組織啟用了不允許 HTML 上傳作為附件或文檔記錄安全設置,則文件上傳器不能用於上傳具有以下文件擴展名的文件:.htm、.html、.htt、.htx、.mhtm 、.mhtml、.shtm、.shtml、.acgi、.svg。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM