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 条评论
登录 后参与评论

相关文章

来自专栏大内老A

利用EntLib授权机制实现对ASP.NET页面的自动授权

ASP.NET默认采用UrlAuthorizationModule和FileAuthorizationModule分别实现针对请求地址和物理文件的授权,但是在很...

1929
来自专栏数据之美

Linux Shell 从入门到删除根目录跑路指南

shell 作为一门 linux 下使用广泛的系统语言,语法简单,上手容易,但是想要用好,少犯错误,也不是那么容易的一件事,可谓虽是居家旅行之良药,但也是杀人灭...

1918
来自专栏实战docker

spring+mybatis启动NoClassDefFoundError异常分析三部曲之三:改spring源码,取详细错误

在上一章《spring+mybatis启动NoClassDefFoundError异常分析三部曲之二:定位错误》中,我们通过打断点的方式,在spring初始化时...

1915
来自专栏Micro_awake web

VSCode配置eslint

在Vue.js项目中,使用的是eslint检查。 而在我写完代码后,cnpm run dev运行命令。。。然后悲剧了,一大堆报错!╮(╯▽╰)╭ 安装插件:Ve...

1K5
来自专栏Bug生活2048

利用Python好好的整理你的附件

可以整理出一份excel用于导航(类似目录),可以通过excel来快速定位到所要的附件,如下图效果:

523
来自专栏技术小黑屋

一个Android代码JIT友好度检测工具

利用周末的时间,写了一个检测Android代码JIT友好度的工具,取个名字为DroidJitChecker。希望可以帮助大家快速发现有坏味道的代码,并且及时修正...

654
来自专栏MixLab科技+设计实验室

设计师编程指南之Sketch插件开发 1

发现网上关于sketch插件开发的指南太少了,而且都不一定可以成功运行,于是我就写了这个系列的文章: 1 我们需要了解的语法特点 sketch 是基于 Coc...

3478
来自专栏蛋未明的专栏

myweb0.2版本(更新)

1283
来自专栏LanceToBigData

struts2(一)之初识struts2

前言   我们都知道struts2是一个框架,那什么是框架呢?很多人其实不太明白,其实框架就是一个半成品,别人将一些功能已经写好了,我们只需要拿来用即可,像我们...

1939
来自专栏cnblogs

简单实现 C# 与 Javascript的兼容

本文章介绍下自己这刚实现的一个c#与js交互的插件。需求来源于一次与朋友的讨论。主要对话如下: 朋友:最近我想模拟一些数据,来测试我现在写的接口,但手工编写这些...

20510

扫码关注云+社区