Code source wiki de DownloadAttachments
Version 7.2 par Paul Libbrecht (admin) le 2016/08/19 20:52
Masquer les derniers auteurs
author | version | line-number | content |
---|---|---|---|
![]() |
1.1 | 1 | // {{groovy}} |
2 | |||
3 | |||
4 | import com.xpn.xwiki.api.Attachment | ||
5 | import com.xpn.xwiki.api.Document | ||
6 | import org.apache.commons.io.IOUtils | ||
7 | import java.util.zip.ZipOutputStream | ||
8 | import java.util.zip.ZipEntry | ||
9 | |||
10 | def page = request.getParameter("page"); | ||
11 | Document pageDoc = null; | ||
12 | try { | ||
![]() |
2.1 | 13 | pageDoc = xwiki.getDocument(page); |
![]() |
1.1 | 14 | } catch(Exception ex) {} |
15 | |||
16 | if(page && pageDoc) { | ||
17 | System.err.println("Should download attachments from page ${pageDoc}."); | ||
![]() |
3.1 | 18 | def uncompressedMimes = ["image/jpeg", "image/png", "application/zip"]; |
![]() |
2.1 | 19 | response.setContentType("application/zip"); |
![]() |
3.1 | 20 | String name = pageDoc.getName(); |
21 | if(name=="WebHome") name = pageDoc.getSpace(); | ||
22 | response.addHeader("Content-Disposition", "attachment; filename=${name}_attachments.zip"); | ||
![]() |
1.1 | 23 | |
24 | |||
25 | ZipOutputStream out = null; | ||
![]() |
2.1 | 26 | System.err.println("Attachments list's size: ${pageDoc.document.attachmentList.size()}."); |
![]() |
1.1 | 27 | try { |
28 | out = new ZipOutputStream(response.getOutputStream()); | ||
29 | for(Attachment att in pageDoc.getAttachmentList()) { | ||
30 | System.err.println("Outputting " + att.filename); | ||
31 | ZipEntry entry = new ZipEntry(att.filename); | ||
![]() |
3.1 | 32 | entry.setTime(att.getDate().getTime()); |
33 | entry.setSize(att.filesize); | ||
34 | if(uncompressedMimes.contain(att.mimeType)) | ||
35 | entry.setMethod(ZipEntry.STORED); | ||
36 | else | ||
37 | entry.setMethod(ZipEntry.DEFLATED); | ||
![]() |
1.1 | 38 | out.putNextEntry(entry); |
![]() |
3.1 | 39 | IOUtils.copy(att.contentInputStream, out, 5*1024*1024); |
![]() |
1.1 | 40 | } |
41 | } catch (Exception ex) { | ||
42 | ex.printStackTrace(); | ||
43 | } finally { | ||
44 | try { | ||
45 | if(out!=null) out.close(); | ||
46 | } catch(Exception e) {} | ||
47 | } | ||
48 | |||
49 | } else { | ||
![]() |
3.1 | 50 | println(""" |
51 | = Download Attachments Macro = | ||
![]() |
5.1 | 52 | Use as ~{~{downloadAttachments/~}~} to see a link to a zip of all attachments. |
![]() |
3.1 | 53 | """); |
![]() |
1.1 | 54 | } |
55 | |||
56 | |||
57 | // {{/groovy}} |