开发者

Salesforce - Is it possible to display image file from ContentVersion to custom visualforce page?

开发者 https://www.devze.com 2023-02-20 10:26 出处:网络
I wrote one simple Visualforce page that let user upload an image file then save the file to ContentVersion object.

I wrote one simple Visualforce page that let user upload an image file then save the file to ContentVersion object.

Now I want to display the saved image in my custom visualforce page. Is it even possible? Looks like <apex:image> cannot be used. Also <img href="{!cv.contentVersion}"...> had no luck.

The real problem is I did upload the image file successfully but what is the URL to it? I tested with random URL outside on google and I can display the image (like /../..some.jpg"). But I can't figure ou开发者_运维技巧t what is the absolute URL for the image file that has been uploaded to contentversion.

NOTE: This is not static resource as my users may upload image to change their user image often.

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

<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>


I don't believe its possible to serve it from content currently The format provided by ScottW works for Documents.

The other option I've done is upload a zip file containing my images to the Static Resources which can then be referenced.


This should work:

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;
}


Based on my experience, "thegogz"is correct - it is not currently possible to render images directly from Content. As others have indicated, rendering from Documents and/or Static Resources does work, and IMHO using Documents is preferable because you can access the URL, binary data, etc. programmatically in Apex.


  • The image is shown using "/servlet/servlet.FileDownload?file=" in tag by using URL attribute.

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

for more information, visit Displaying Images in a Visual Force Page


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

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号