¿Podemos vincular directamente la propiedad de la clase apex en LWC, para la carga de archivos de 25 MB con apex (problema de tamaño del montón)?

Aug 21 2020

Tengo un componente lwc como:

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
    })

  }
}

y su plantilla html es:

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

Y una clase de ápice como esta:

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;
  }
}

Lo que necesito es alguna forma mediante la cual podamos conectar directamente adjuntar en la clase apex anterior a la plantilla para que pueda obtener directamente el blob en adjuntar en la clase apex como tenemos para el componente de archivo de entrada de página de Visualforce a continuación

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

Aquí asignamos directamente el archivo seleccionado a attach.body . De manera similar, ¿hay alguno mediante el cual podamos vincular directamente adjuntar a lwc para que blob esté disponible en attach.Body. Esto me ayudaría a cargar archivos adjuntos grandes como hasta 25 MB sin afectar el problema del tamaño del montón con Apex.

Cualquier ayuda será muy apreciada. Gracias por adelantado.

Tenga en cuenta: como estoy usando un rayo , no se puede usar la carga de archivos de rayos aquí

Respuestas

1 sfdcfox Aug 21 2020 at 00:59

Tendrás que usar algún tipo de API. Apex tiene un límite de almacenamiento dinámico de 6 MB, por lo que se encontrará con él independientemente (la vinculación directa no ayudaría), y también hay un tamaño máximo de carga útil (4 MB), por lo que el archivo más grande que cargaría razonablemente es de alrededor de 3 MB, incluido base64 codificación.