[英]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。
您寫道“我們需要上傳多個文件,並且提供的多文件上傳組件不支持所有擴展名”。 這可能是由這些引起的:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.