salesforce 零基礎學習(五十三)多個文件生成一個zip文件(使用git上封裝的代碼)


此篇參考git代碼:https://github.com/pdalcol/Zippex

學習salesforce可以訪問一個朋友的網站:https://www.xgeek.net

首先感謝git上提供代碼的大神,學到了新的知識。salesforce不像java提供生成Zip文件的類庫,通過git上copy的代碼可以實現此功能,具體的使用方法以及API可以查看上方git鏈接。

概述:實例模擬三個上傳組件,加上一個下載Zip包按鈕,本地選擇需要上傳的文件,點擊按鈕后便會下載成一個壓縮文件,壓縮文件中包含上傳的文件內容。

一.ZipController:

 1 public with sharing class ZipController {
 2     
 3     public transient Blob fileUploadBody1{get;set;}
 4     
 5     public String fileUploadName1{get;set;}
 6     
 7     public transient Blob fileUploadBody2{get;set;}
 8     
 9     public String fileUploadName2{get;set;}
10     
11     public transient Blob fileUploadBody3{get;set;}
12     
13     public String fileUploadName3{get;set;}
14     
15     public transient Map<String,Blob> fileNameToBody{get;set;}
16     
17     public PageReference reference{get;set;}
18     
19     public PageReference downloadZip() {
20         String zipName = 'testZip.zip';
21         String prefixFolder = 'folder/';
22         fileNameToBody = new Map<String,Blob>();
23         if(fileUploadName1 != null && fileUploadBody1 != null) {
24             fileNameToBody.put(fileUploadName1,fileUploadBody1);
25         }
26         if(fileUploadName2 != null && fileUploadBody2 != null) {
27             fileNameToBody.put(fileUploadName2,fileUploadBody2);
28         }
29         if(fileUploadName3 != null && fileUploadBody3 != null) {
30             fileNameToBody.put(fileUploadName3,fileUploadBody3);
31         }
32         Zippex zip = new Zippex();
33         for(String fileName : fileNameToBody.keySet()) {
34             zip.addFile(prefixFolder + fileName, fileNameToBody.get(fileName),null);
35         }
36         try{
37           Document doc = new Document();
38           doc.FolderId = UserInfo.getUserId();
39           doc.Name = zipName;
40           doc.Body = zip.getZipArchive();
41           insert doc;
42           return new PageReference('/servlet/servlet.FileDownload?file=' + doc.Id);
43         } catch ( Exception ex ) {
44           ApexPages.addMessage(new ApexPages.Message(ApexPages.severity.ERROR,'生成zip失敗'));
45         }
46         return null;
47     }
48 }

二.ZipPage

<apex:page controller="ZipController">
    <apex:form >
    <apex:pageMessages />
    <apex:inputFile value="{!fileUploadBody1}" filename="{!fileUploadName1}" />
    <apex:inputFile value="{!fileUploadBody2}" filename="{!fileUploadName2}" />
    <apex:inputFile value="{!fileUploadBody3}" filename="{!fileUploadName3}" />
    
    <apex:pageBlock title="download zip ">
        <apex:commandButton action="{!downloadZip}" value="Download"/>
    </apex:pageBlock>
  </apex:form>
</apex:page>

 三.顯示效果:

總結:此種方式對於中文文件處理會有亂碼問題,本來想通過addFile方法進行一下UTF-8編碼轉換,結果轉換完getZipArchive方法出現了編碼解碼的異常,有興趣的朋友可以解決中文亂碼的問題並且歡迎分享。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM