- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-15-2019 10:38 AM
HI Folks,
I have a requirement like, i need to download all the attachments from sys_attachment table at once or 10k per time. Using REST i think i can do this. But can some one please help me in process how to download the attachments in bulk.
Regards,
Vijay
Solved! Go to Solution.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-19-2019 06:42 AM
Hi Vijay,
You can use the same process as mentioned in this link. With slight modifications, you can get to download all attachments.
https://www.servicenowguru.com/scripting/download-attachments-zip-file/#comment-34336
Please note that the script might take time and if you want to limit to N number of records, you can do so in the below script.
Few points to Note
1. The count variable is added to the file name to avoid duplicate file names. If there are duplicate file names, the zip process will break.
2. The script is modified to simply query sys_attachment and download them in the processor. It is not capturing any parameters from UI action as such.
3. Create the UI action as a form button on any incident or any other table.
var zipName = 'attachments.zip';
var StringUtil = GlideStringUtil;
var gr = new GlideRecord('sys_attachment');
gr.query();
if (gr.next()){
g_response.setHeader('Pragma', 'public');
g_response.addHeader('Cache-Control', 'max-age=0');
g_response.setContentType('application/octet-stream');
g_response.addHeader('Content-Disposition', 'attachment;filename=' + zipName);
var out = new Packages.java.util.zip.ZipOutputStream(g_response.getOutputStream());
var count=0;
while (gr.next()){
var sa = new GlideSysAttachment();
var binData = sa.getBytes(gr);
//add counter so that the filename is NOT duplicate
var file = gr.file_name+"-"+count;
gs.info("Entered into this loop"+file);
addBytesToZip(out, zipName, file, binData);
count ++;
}
// Complete the ZIP file
out.close();
}
function addBytesToZip (out, dir, file, stream){
// Add ZIP entry to output stream.
out.putNextEntry(new Packages.java.util.zip.ZipEntry(file));
out.write(stream, 0, stream.length);
out.closeEntry();
}
I ran this in my dev instance and it worked fine. The script takes time to download all the attachments. To test the script, i suggest you break the loop above at 5 or 10 records.
Mark the comment as correct and also helpful once worked.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-28-2020 05:30 AM
Hi Vijay,
Since processors are deprecated and the alternative suggested is scripted rest api, are you aware how can we download attachments in bulk using REST?
Because i guess same code will not work in scripted rest.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-22-2021 09:17 AM
where to find downloaded attachment
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-09-2021 11:55 PM
Hi
I want to extract all the attachments for a single Catalogitem/RITM is there a way I can achieve that.
Thanks.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-29-2021 07:39 AM
Hi,
is it possible to use this in background script?
I need to use it only for one-time solution, but when I use g_response in background script, there is error: "g_response is not defined"
But I thought it is a global variable (docs link)
Could someone clarify it to me, please?

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-26-2022 08:43 PM
Please check this one also : https://www.servicenowguru.com/scripting/download-attachments-zip-file/#comment-34336