Page 1 sur 1

ZIP pieces jointes

MessagePublié: 15 Fév 2007 à 15:50
par billbock
Agent JAVA permettant de zipper toutes les pieces jointes d'un document et de les zipper dans un fichier unique

Puis reattachement du ZIP dans le document

[syntax="java"]// used classes
import lotus.domino.*;
import java.io.*;
import java.util.*;
import java.util.zip.*;
import java.util.Vector;
import java.util.Enumeration;

// standard notes class
public class JavaAgent extends AgentBase {

// main programm
public void NotesMain() {
try {

// declaration of some variables
FileOutputStream fos;
RichTextItem rtitem;
String attachmentname;
String archivename;
String oldarchive;
byte b[] = new byte[512];

// initialize
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
Database db = agentContext.getCurrentDatabase();
DocumentCollection col = agentContext.getUnprocessedDocuments();
Document doc = col.getFirstDocument();

// loop through all documents
while (doc != null)
{

// save flag
boolean saveFlag = false;

// location of the data dir
archivename = session.getEnvironmentString("Directory",true) + "\\" + doc.getItemValueString("Topic") + ".zip";

// create an new file and zip output stream
fos = new FileOutputStream(archivename);
ZipOutputStream zout = new ZipOutputStream(fos);

// get the bodyfield
rtitem = (RichTextItem) doc.getFirstItem("Body");

// get all embedded objects and the number
Vector v = rtitem.getEmbeddedObjects();
Enumeration e = v.elements();

// loop through all objects
while (e.hasMoreElements())
{
EmbeddedObject eo = (EmbeddedObject)e.nextElement();

// check if it's an attachment
if (eo.getType() == EmbeddedObject.EMBED_ATTACHMENT)
{

// check the ending of the attachment, if it's a zip file, then it doesn't make sense to zip it again
if
( eo.getName().toUpperCase().endsWith( ".ZIP" ));
else
{
InputStream in = eo.getInputStream();
ZipEntry ze = new ZipEntry(eo.getName().replace(File.separatorChar,'/'));
zout.putNextEntry(ze);
int len=0;

// read the bytes
while((len=in.read(b)) != -1)
{
zout.write(b,0,len);
}

// close the entry and remove the attachment
zout.closeEntry();
eo.remove();
saveFlag = true;
}
}
}

// check if something has changed in the document
if (saveFlag)
{
// close the file- and zip output stream
zout.close();
fos.close();

// add some lines to the body item
rtitem.addNewLine( 3 );

// attach the file
rtitem.embedObject(EmbeddedObject.EMBED_ATTACHMENT, null, archivename, archivename);

// add some text to the subject line
doc.replaceItemValue("Subject", doc.getItemValueString("Topic") + " <contient des fichiers zippés>");

// save the document
doc.save(true, true);
saveFlag = false;

}

// close and delete the zip file
fos.close();
File zipfile = new File(archivename);
zipfile.delete();

// get the next document
doc = col.getNextDocument(doc);
}

// handle the errors
} catch (Exception e) {
e.printStackTrace();
}
}
}[/syntax]

MessagePublié: 31 Mars 2009 à 12:10
par Michael DELIQUE
Pour zipper le fichier sans rajouter l'arobrescence

// Add ZIP entry to output stream.
File fileToZip = new File(pathFileToZip);
out.putNextEntry(new ZipEntry(fileToZip.getName()));

Re: ZIP pieces jointes

MessagePublié: 01 Sep 2010 à 09:03
par scoste
J'ai utiliser ce code pour zipper des fichiers mais comme j'ai des accents dans mes noms de fichiers les noms de fichiers contenus dans le zip contiennent des +¿ au lieu d'un è.

J'ai recherché mais je ne trouve pas de solution. je pense qu'il s'agit d'un problème de charset entre le FileOutputStream, FileInputStream et le ZipEntry.

Est ce que qu'un a déjà rencontré le pb? avez vous une idée merci par avance

Sylvain coste