Possiamo associare direttamente la proprietà della classe apex in LWC - per il caricamento di file da 25 MB con apex (problema di dimensione dell'heap)?

Aug 21 2020

Ho un componente lwc come:

import { LightningElement } from 'lwc';
import {saveAttachment} from '@salesforce/apex/DocumentController.saveAttachment'

export default class FileUpload extends LightningElement {

  fileSelectionHandler() {
   // some logic to get the file
  }
  
  uploadFile() {
    saveAttachment({parentId: 'a0H3I000001SsylUAC'})
    .then(() => {
     // some code here
    })
    .catch(() => {
    // some code here
    })

  }
}

e il suo modello html è:

<template>
  <input type="file" onchange={fileSelectionHandler}>
  <button onclick={}>Upload</button>
</template>

E una classe apex come questa:

public without sharing class DocumentController {

  @AuraEnabled
  public static string saveAttachment(String parentId) {
    Attachment attach = new Attachment();
    attach.Name = 'test.pdf';
    attach.ParentId = parentId;
    // attach.Body ==> this part should come from lwc

    insert attach;
    return attach.Id;
  }
}

Quello di cui ho bisogno è un modo in cui possiamo collegare direttamente l' allegato nella classe apex sopra al modello in modo da poter portare direttamente il blob all'allegato nella classe apex come abbiamo per il componente del file di input della pagina visualforce di seguito

<apex:inputfile style="" value="{!attach.body}" filename="{!attach.name}" contentType="{!attach.ContentType}"/>

Qui assegniamo direttamente il file selezionato a attach.body , Allo stesso modo ce n'è uno tramite il quale possiamo associare direttamente attach a lwc in modo che il blob sia disponibile in attach.Body. Questo mi aiuterebbe a caricare allegati di grandi dimensioni come fino a 25 MB senza incontrare il problema delle dimensioni dell'heap con l'apice.

Qualsiasi aiuto sarebbe molto apprezzato. Grazie in anticipo.

Nota: poiché sto usando lighning out, il caricamento di file fulmine non può essere utilizzato qui

Risposte

1 sfdcfox Aug 21 2020 at 00:59

Dovrai usare una sorta di API. Apex ha un limite di heap di 6 MB, quindi ti imbatteresti in esso a prescindere (l'associazione diretta non sarebbe d'aiuto), e inoltre c'è una dimensione massima del payload (4 MB), quindi il file più grande che dovresti ragionevolmente caricare è di circa 3MB, include base64 codifica.