When user clicks the download button in VF page, the apex code has to generate a xdp file on the fly and should get downloaded in the user machine. The below code creates the attachment. I don't know how to return a download action.

In fact this file need not have to be saved as an attachment.I am saving this as an attachment as I don't know how to do it without it. Anyway please explain how this file can be downloaded in this action method.

List<ContentVersion > lstContentVersion = [SELECT FileType,IsLatest,Title,VersionData FROM ContentVersion where title = 'Application Data Sheet' and islatest = true and fileextension = 'XML'];
        string xmlContent; 

            Blob b = lstContentVersion[0].VersionData;                
            xmlContent  = b.toString();  
            Attachment attachment = new Attachment();
            attachment.Body = Blob.valueOf(xmlContent);
            attachment.Name = 'Application data sheet.xdp';
             attachment.ContentType ='application/vnd.adobe.xdp+xml';
            attachment.ParentId = ApexPages.currentPage().getParameters().get('id');
            insert attachment;

1 Answer 1


You would need to set up a download action. Arguably, this is probably most easily done with a download link:

<!-- visualforce -->
<a href="data:application/vnd.adobe.xdp+xml;base64,{!xmlContent}"
   download="Application Data Sheet.xdp">Download Me!</a>

On slightly older browsers, this may fail if the file is significantly large enough; in that case, you'll want to consider saving said attachment and then deriving the url from Url.getFileFieldURL, which is supposed to return an appropriate link to use.

  • Brilliant. The file was big, so the first solution did not work. With getFileFieldURL, I am not sure what the second parameter should be. Tried both AttachmentBody and Body. Both did not work. Please suggest.
    – Saranya
    Mar 6, 2018 at 10:09

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .