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方法出现了编码解码的异常,有兴趣的朋友可以解决中文乱码的问题并且欢迎分享。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏散尽浮华

Python-执行系统命令

执行系统命令 os.system os.spawn* os.popen popen2.* commands.* 后面三个已经废弃,以上执行shell命令的相关的...

21310
来自专栏程序员互动联盟

【答疑释惑】标准C语言如何操作文件?

C语言中操作文件功能都用ANSI C提供的一组标准库函数来实现。文件操作标准库函数有如下: fprintf:往文件中写格式化数据 fscanf:格式化读取文件中...

3409
来自专栏JavaQ

高并发编程-Condition深入解析

Condition接口位于java.util.concurrent.locks包下,实现类有 AbstractQueuedLongSynchronizer.Co...

754
来自专栏码代码的陈同学

Java中的类加载器

Class loaders属于JRE的一部分,负责在运行时将Java类动态加载到JVM。得益于class loaders,JVM在无需知晓底层文件或文件系统时就...

702
来自专栏Laoqi's Linux运维专列

for 循环,while循环,break,continue,exit

3388
来自专栏北京马哥教育

十分钟带你了解 Python3 多线程核心知识

每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。 每个线程都有他自...

2525
来自专栏与神兽党一起成长

使用FTP连接池封装工具类

早前的思路是将FTP连接的管理(对象池功能)与FTP工具类(上传下载方法)在一个工程中实现,在工具类中调用是模板类提供的模板方法, 由模板方法与对象池打交道——...

1152
来自专栏zhisheng

Guava Cache 用法介绍

Guava Cache是在内存中缓存数据,相比较于数据库或redis存储,访问内存中的数据会更加高效。Guava官网介绍,下面的这几种情况可以考虑使用Guava...

602
来自专栏陈树义

Java并发编程:synchronized

Java并发编程:synchronized   虽然多线程编程极大地提高了效率,但是也会带来一定的隐患。比如说两个线程同时往一个数据库表中插入不重复的数据,就可...

3374
来自专栏CaiRui

Shell-3-文件之名

1.生成任意大小的文件 [root@localhost tmp]# dd if=/dev/zero of=junk.data bs=1M count=1 记录了...

1909

扫码关注云+社区