Bisakah kita langsung mengikat properti kelas apex di LWC - untuk unggahan file 25MB dengan apex (masalah ukuran tumpukan)?

Aug 21 2020

Saya memiliki komponen lwc seperti:

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

  }
}

dan template html-nya adalah:

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

Dan kelas puncak seperti ini:

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

Yang saya butuhkan adalah bagaimanapun yang kita dapat langsung menghubungkan melampirkan di kelas puncak di atas untuk template sehingga saya bisa langsung mendapatkan gumpalan ke melampirkan di kelas puncak seperti yang kita miliki untuk komponen halaman visualforce masukan file di bawah

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

Di sini kami langsung menetapkan file yang dipilih ke attach.body , Demikian pula apakah ada yang bisa kami gunakan untuk langsung mengikat attach ke lwc sehingga blob tersedia di attach.Body. Ini akan membantu saya dalam mengupload lampiran besar seperti hingga 25MB tanpa mengenai masalah ukuran heap dengan apex.

Bantuan apa pun akan sangat dihargai. Terima kasih sebelumnya.

Harap diperhatikan: Karena saya menggunakan lighning out, lightning-file-upload tidak dapat digunakan di sini

Jawaban

1 sfdcfox Aug 21 2020 at 00:59

Anda harus menggunakan semacam API. Apex memiliki batas heap 6MB, jadi Anda akan menemukannya (mengikat secara langsung tidak akan membantu), dan juga ada ukuran muatan maksimum (4MB), jadi file terbesar yang Anda unggah secara wajar adalah sekitar 3MB, termasuk base64 pengkodean.