Упрощение загрузки файлов на страницах Visualforce: подробное руководство

Visualforce, платформа, предоставляемая Salesforce, позволяет разработчикам создавать собственные пользовательские интерфейсы в своих приложениях Salesforce. Одним из общих требований является предоставление пользователям возможности загружать вложения через страницы Visualforce. В этой статье блога мы рассмотрим различные методы достижения этой функциональности, сопровождаемые примерами кода.

Метод 1: стандартный ввод файла HTML
Самый простой подход — использовать элемент HTML <input type="file">. Вот пример:

<apex:page>
  <input type="file" id="fileInput" />
  <apex:commandButton value="Upload" action="{!uploadFile}" reRender="fileList" />
  <apex:outputPanel id="fileList">
    <!-- Display uploaded files here -->
  </apex:outputPanel>
</apex:page>

В контроллере вы можете обрабатывать загрузку файлов, используя тип данных Blob:

public class MyController {
  public Blob fileData { get; set; }
  public void uploadFile() {
    // Process fileData here
  }
}

Метод 2. Использование <apex:inputFile>
Visualforce предоставляет специальный компонент <apex:inputFile>, который упрощает загрузку файлов. Вот пример:

<apex:page>
  <apex:form enctype="multipart/form-data">
    <apex:inputFile value="{!fileData}" />
    <apex:commandButton value="Upload" action="{!uploadFile}" reRender="fileList" />
  </apex:form>
  <apex:outputPanel id="fileList">
    <!-- Display uploaded files here -->
  </apex:outputPanel>
</apex:page>

В контроллере определите переменную типа Blobдля хранения загруженных данных файла, как показано в методе 1.

Метод 3. Использование JavaScript и удаленных объектов
Если вы предпочитаете более динамичный подход, вы можете использовать JavaScript и удаленные объекты Salesforce для обработки загрузки файлов. Вот пример:

<apex:page>
  <input type="file" id="fileInput" />
  <button onclick="uploadFile()">Upload</button>
  <apex:outputPanel id="fileList">
    <!-- Display uploaded files here -->
  </apex:outputPanel>
  <script>
    function uploadFile() {
      var fileInput = document.getElementById('fileInput');
      var file = fileInput.files[0];
      var reader = new FileReader();
      reader.onload = function (e) {
        var fileData = e.target.result;
        var attachment = new SObjectModel.Attachment();
        attachment.Name = file.name;
        attachment.Body = fileData;
        attachment.create(function (response) {
          // Handle response
        });
      };
      reader.readAsDataURL(file);
    }
  </script>
</apex:page>

В этом методе мы используем FileReaderJavaScript для чтения файла как URL-адреса данных, а затем создаем новую запись Attachmentс помощью удаленных объектов Salesforce.

В этой статье блога мы рассмотрели три различных метода реализации загрузки файлов на страницах Visualforce. Первый метод использует стандартный HTML, второй использует компонент <apex:inputFile>, а третий использует JavaScript и удаленные объекты. В зависимости от ваших требований и предпочтений вы можете выбрать наиболее подходящий подход для вашего приложения Salesforce.