2016-05-04 26 views
1

Ich habe eine Download-Schaltfläche in meiner Visualforce-Seite, beim Klicken auf die eine Textdatei (.TXT-Format) heruntergeladen werden muss. Diese Textdatei wird dynamisch mit den Daten erstellt, die in einem Textfeld eines benutzerdefinierten Objekts gespeichert sind. Jetzt habe ich Mühe, diese einfache Download-Funktionalität zu erreichen, ohne Anhänge oder Document Objects zu erstellen. Gibt es eine Möglichkeit, Inhalte als reine Textdatei herunterzuladen? Könnte mir bitte jemand helfen?Textdatei-Download in der Visualforce-Seite

Ich habe den folgenden Visualforce-Code ausprobiert, aber es werden keine Dateien heruntergeladen.

<a href="data:text/plain;charset=utf-8;base64,{!getEncodedData}"> Download License </a></apex:outputLabel> 

Dabei ist getEncodedData der Textdateikörper.

Apex Code:

getEncodedData = EncodingUtil.base64Encode(Blob.valueOf(strContent)); 

P.N: Ich versuche, dies zu erreichen, ohne Anhänge zu schaffen, einfach weil die erstellte Datei nicht später wiederverwendet werden.

Jede Hilfe wird wirklich geschätzt .. !!

Antwort

0

JavaScript Textdownload machte es einfach als die href Nutzung, vor allem in diesem Fall :-)

Und hier ist die genaue Strömung.

Visualforce-Code:

<apex:outputLabel onClick="javascript:fnDownloadContent('{!ID}','{!compId}');" >Download</apex:outputLabel> 
<apex:actionfunction name="actDnldContent" action="{!fileContent}" reRender="" oncomplete="javascript:download('{!filename}','{!getData}');"> 
<apex:param name="Id" value="" assignTo="{!Id}" /> 
<apex:param name="compId" value="" assignTo="{!CompId}"/>                  
</apex:actionfunction> 

JavaSript Funktion:

function fnDownloadContent(ID, compID) 
{ 
    actDnldContent(ID, compID);   
} 
function download(filename,text) 
{ 
    var element = document.createElement('a'); 
    element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text)); 
    element.setAttribute('download', filename); 
    element.style.display = 'none'; 
    document.body.appendChild(element); 
    element.click(); 
    document.body.removeChild(element); 
} 

In dem obigen Code, der 'Dateiname' und 'getData' Variablen werden auf den Aufruf der Apex-Methode 'filecontent' gesetzt werden in der Apex-Controller.

0

Lassen Sie die Schaltfläche einen neuen Tab öffnen (target = "_ blank", wenn ich mich richtig erinnere) und eine neue Seite laden. Sie können eine normale Seite mit Druckfelder und alles zusammen, man muss nur den Inhaltstyp ändern:

<apex:page standardController="Account" contentType="application/vnd.ms-excel"> 

https://developer.salesforce.com/docs/atlas.en-us.pages.meta/pages/pages_styling_content_type.htm (beachten Sie, dass es mehr Inhaltstypen verfügbar sind als das, was sie auf dieser Seite Liste).