PeopleSoft中对文件附件的处理都是单个文件处理的,虽然在8.52版本新增了MAddAttachment(URLDestination, DirAndFilePrefix, Prompts, &UserFileArray, &ActualSizeArray, &DetailedReturnCodeArrayName [, MaxSize [, PreserveCase[, UploadPageTitle[, AllowLargeChunks[, StopOnError]]]]]) Function 实现了一次上传多个附件的功能,但是在下载附件的时候,还是只能单个下载,

这样就给客户的操作带来的很多不便,这篇文章来说明一下如何在PeopleCode中调用Java类来实现对文件的打包

REM ** The file I want to compress;
 
Local string &fileNameToZip = "c:\temp\blah.txt";
 
 
REM ** The internal zip file's structure -- internal location of blah.txt;
 
Local string &zipInternalPath = "my/internal/zip/folder/structure";
 
 
Local JavaObject &zip = CreateJavaObject("java.util.zip.ZipOutputStream", CreateJavaObject("java.io.FileOutputStream", "c:\temp\compressed.zip", True));
 
 
Local JavaObject &file = CreateJavaObject("java.io.File", &fileNameToZip);
 
REM ** We will read &fileNameToZip into a buffer and write it out to &zip;
 
Local JavaObject &buf = CreateJavaArray("byte[]", 1024);
 
 
Local number &byteCount;
 
Local JavaObject &in = CreateJavaObject("java.io.FileInputStream", &fileNameToZip);
 
 
Local JavaObject &zipEntry = CreateJavaObject("java.util.zip.ZipEntry", &zipInternalPath | "/" | &file.getName());
 
 
REM ** Make sure zip entry retains original modified date;
 
&zipEntry.setTime(&file.lastModified());
 
 
&zip.putNextEntry(&zipEntry);
 
 
&byteCount = &in.read(&buf);
 
 
While &byteCount > 0
 
&zip.write(&buf, 0, &byteCount);
 
&byteCount = &in.read(&buf);
 
End-While;
 
 
&in.close();
 
&zip.flush();
 

&zip.close();
这样就是实现了对文件的打包,不过为了代码重用,我们可以将这段代码写成一个Function

  1. Function AddFileToZip(&zipInternalPath, &fileNameToZip, &zip)
  2. Local JavaObject &file = CreateJavaObject("java.io.File", &fileNameToZip);
  3. REM ** We will read &fileNameToZip into a buffer and write it out to &zip;
  4. Local JavaObject &buf = CreateJavaArray("byte[]", 1024);
  5. Local number &byteCount;
  6. Local JavaObject &in = CreateJavaObject("java.io.FileInputStream", &fileNameToZip);
  7. Local JavaObject &zipEntry = CreateJavaObject("java.util.zip.ZipEntry", &zipInternalPath | "/" | &file.getName());
  8. REM ** Make sure zip entry retains original modified date;
  9. &zipEntry.setTime(&file.lastModified());
  10. &zip.putNextEntry(&zipEntry);
  11. &byteCount = &in.read(&buf);
  12. While &byteCount > 0
  13. &zip.write(&buf, 0, &byteCount);
  14. &byteCount = &in.read(&buf);
  15. End-While;
  16. &in.close();
  17. End-Function;

然后每次使用的时候,只需要调用这个Function就可以了。

  1. Local JavaObject &zip = CreateJavaObject("java.util.zip.ZipOutputStream", CreateJavaObject("java.io.FileOutputStream", "c:\temp\compressed.zip", True));
  2. AddFileToZip("folder1", "c:\temp\file1.txt", &zip);
  3. AddFileToZip("folder1", "c:\temp\file2.txt", &zip);
  4. AddFileToZip("folder2", "c:\temp\file1.txt", &zip);
  5. AddFileToZip("folder2", "c:\temp\file2.txt", &zip);
  6. &zip.flush();
  7. &zip.close();

PeopleCode 处理压缩文件的更多相关文章

  1. 【VC++技术杂谈008】使用zlib解压zip压缩文件

    最近因为项目的需要,要对zip压缩文件进行批量解压.在网上查阅了相关的资料后,最终使用zlib开源库实现了该功能.本文将对zlib开源库进行简单介绍,并给出一个使用zlib开源库对zip压缩文件进行解 ...

  2. C#基础-压缩文件及故障排除

    C#压缩文件可以使用第三方dll库:ICSharpCode.SharpZipLib.dll: 以下代码能实现文件夹与多个文件的同时压缩.(例:把三个文件夹和五个文件一起压缩成一个zip) 直接上代码, ...

  3. 破解压缩文件密码rarcrack

    破解压缩文件密码rarcrack   常见的压缩文件格式有ZIP.RAR和7z.这三种格式都支持使用密码进行加密压缩.前面讲过破解ZIP压缩文件,可以使用fcrackzip.对于RAR和7z格式,可以 ...

  4. 文件打包,下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件

    总结:                                                          使用PHP下载文件的操作需要给出四个header(),可以参考我的另一篇博文: ...

  5. java ZipOutputStream压缩文件,ZipInputStream解压缩

    java中实现zip的压缩与解压缩.java自带的 能实现的功能比较有限. 本程序功能:实现简单的压缩和解压缩,压缩文件夹下的所有文件(文件过滤的话需要对File进一步细节处理). 对中文的支持需要使 ...

  6. C# 压缩文件与字节互转

    public class ZipBin { public byte[] bytes; //C#读取压缩文件(将压缩文件转换为二进制 public void GetZipToByte(string in ...

  7. Linux如何复制,打包,压缩文件

    (1)复制文件 cp -r  要copy的文件/("/"指的是包括里面的内容)   newfile_name(要命名的文件名) eg:cp -r webapps_zero/   f ...

  8. java生成压缩文件

    在工作过程中,需要将一个文件夹生成压缩文件,然后提供给用户下载.所以自己写了一个压缩文件的工具类.该工具类支持单个文件和文件夹压缩.放代码: import java.io.BufferedOutput ...

  9. 7z压缩文件时排除指定的文件

    分享一个7z压缩文件时排除指定文件类型的命令行,感觉很有用: 7z a -t7z d:\updateCRM.7z d:\updateCRM\*.* -r -x!*.log -x!*bak a:创建压缩 ...

随机推荐

  1. 无法向会话状态服务器发出会话状态请求请。确保 ASP.NET State Service (ASP.NET 状态服务)已启动

    原文链接:http://www.cnblogs.com/IT-Bear/archive/2012/01/04/2311546.html 无法向会话状态服务器发出会话状态请求.请确保 ASP.NET S ...

  2. PHP中$_FILES的使用及注意事项

    $_FILES: 经由 HTTP POST 文件上传而提交至脚本的变量.类似于旧数组 $HTTP_POST_FILES 数组(依然有效,但反对使用).$_FILES数组内容如下: $_FILES['m ...

  3. Enterprise Library 5.0 系列教程

    1. Microsoft Enterprise Library 5.0 系列教程(一) Caching Application Block (初级) 2. Microsoft Enterprise L ...

  4. 共享池之八:软解析、硬解析、软软解析 详解一条SQL在library cache中解析涉及的锁

    先来张大图: 结合上图来说明一下解析的各个步骤涉及的锁. 软解析.硬解析.软软解析区别的简单说明: 为了将用户写的sql文本转化为oracle认识的且可执行的语句,这个过程就叫做解析过程. 解析分为硬 ...

  5. nginx 配置文件参数说明

    #运行用户 user www-data;     #启动进程,通常设置成和cpu的数量相等 worker_processes  1; #全局错误日志及PID文件 error_log  /var/log ...

  6. asp.net 播放flash

    注意3点: 1.路径,swf播放器对应的是当前页面的路径,flv视频对应的是swf播放器的路径2.路径中不能出现中文3.IIS设置,IIS站点属性中的HTTP头->MIME添加MIME影射关系, ...

  7. 静态库制作.a .framework

    一.静态库 .a 制作   1.新建一个Cocoa Touch Static Library         2.往里面添加文件,或者自己新建         3.添加一个Headers Phase ...

  8. button的type属性

    今天为看懂一段js代码纠结了很久,搞不明白数据是如何实现post,因为button没有规定属性,其次对submit事件没太搞明白.忽然想起默认属性这个概念,豁然开朗,啊~ 1.请始终为按钮规定 typ ...

  9. Java程序员面试宝典——重要习题整理

    1.下面程序的输出结果是() public class Test { public static void main(String[] args) { int j = 0 ; for(int i = ...

  10. Ossim应用体验视频

    Ossim体验视频 近期,我写的有关Ossim应用的系列文章网友们非常关注,这里对大家提出有一些问题我制作了高清的视频和截图发布到网站,以让更多的人了解这款开源安全平台.在年后出版的教程中会详细讲解o ...