2011-03-28 1 views
3

J'ai écrit une page Visualforce simple qui permet à l'utilisateur de télécharger un fichier image puis enregistrer le fichier à l'objet ContentVersion.Salesforce - Est-il possible d'afficher le fichier image de ContentVersion sur une page Visualforce personnalisée?

Maintenant Je souhaite afficher l'image enregistrée dans ma page Visualforce personnalisée. Est-ce encore possible? On dirait que <apex:image> ne peut pas être utilisé. Aussi <img href="{!cv.contentVersion}"...> avait pas de chance.

Le vrai problème est que j'ai téléchargé le fichier image avec succès mais quelle est l'adresse URL? J'ai testé avec une URL aléatoire à l'extérieur sur google et je peux afficher l'image (comme /../..some.jpg ") .Mais je ne peux pas savoir quelle est l'URL absolue pour le fichier image qui a été téléchargé ContentVersion

NOTE:. Ce n'est pas ressource statique que mes utilisateurs peuvent télécharger l'image pour changer leur image utilisateur souvent

code

public with sharing class ImageUploadTestController { 

    public blob file { get; set; } 
    public String imageFilePath { get; set; } 

    public ContentVersion cv { get; set; } 

    public ImageUploadTestController() { 
     cv = [select id, versionData, title, pathOnClient FROM ContentVersion limit 1]; 
    } 

    //fill out the inputFile field and press go. This will upload file to the server 
    public PageReference go() { 
     ContentVersion v = new ContentVersion(); 
     v.versionData = file; 
     v.title = 'some title'; 
     v.pathOnClient ='/foo.jpeg'; 
     insert v; 

     return new PageReference('/' + v.id); 
    } 

    //v.id sample 
    //069A00000009Ux3 

}//end class 

Visualforce Page

0123.
<apex:page controller="ImageUploadTestController"> 
    <apex:form > 
    <apex:inputFile value="{!file}" /> 

    <apex:commandbutton action="{!go}" value="go"/> 
    </apex:form> 

    <!-- none of below works!! :(--> 
    <a href="/{!cv.id}">{!cv.title} {!cv.pathOnClient}</a> 
    <a href="https://na7.salesforce.com/069A00000009FG4"></a> 
    <apex:image value="/069A00000009Ux3" width="220" height="55"/> 

</apex:page> 

Répondre

3

Je ne crois pas il est possible de servir de contenu actuellement le format fourni par ScottW fonctionne pour les documents.

L'autre option que j'ai faite est de télécharger un fichier zip contenant mes images vers les ressources statiques qui peuvent ensuite être référencées.

+0

Oui, l'enregistrement dans l'objet Document fonctionne. Seul inconvénient est l'application, puis ne peut pas être emballé si la table de documents a des enregistrements aussi loin que mon collègue a essayé. Je souhaite que nous pourrions le faire avec facilité .. –

1

Essayez <apex:image URL="/servlet/servlet.FileDownload?file={!recordId}"/>

+0

Non, il n'a pas fonctionné, je mets le code ci-dessous et il ne se présente pas à la page VP
J'ai également essayé

+0

Je suppose que je dois utiliser l'objet Document à la place qui n'est pas autorisé à avoir des données en phase de conditionnement mais c'est peut-être le seul moyen ... :( –

+0

Si vous avez l'URL ci-dessus, vous pouvez simplement utiliser un tag HTML normal pour afficher l'image, plutôt que d'utiliser apex: image. –

2

Cela devrait fonctionner:

public PageReference getContent(){ 
    String html = ApexPages.currentPage().getParameters().get('html'); 
    PageReference redirection = null; 
    redirection = new PageReference('/sfc/servlet.shepherd/version/download/' + contentVersion.Id); 
    redirection.setRedirect(true); 
    return redirection; 
} 
1

Sur la base de mon expérience, « thegogz » est correct - il est actuellement impossible de rendre des images directement à partir de contenu. Comme d'autres l'ont indiqué, le rendu à partir de Documents et/ou de Ressources Statiques fonctionne, et à mon humble avis en utilisant Documents est préférable car vous pouvez accéder à l'URL, aux données binaires, etc. par programmation dans Apex.

1
  • L'image est affichée en utilisant "/servlet/servlet.FileDownload?file=" dans la balise en utilisant l'attribut URL.

Exemple:. <apex:image URL="/servlet/servlet.FileDownload?file={!recordId}"/>

pour plus d'informations, visite Displaying Images in a Visual Force Page

Questions connexes