Salesforce - 是否可以将ContentVersion中的图像文件显示到自定义visualforce页面?

时间:2011-03-28 10:14:54

标签: image upload salesforce visualforce apex-code

我编写了一个简单的Visualforce页面,让用户上传图像文件 将文件保存到ContentVersion对象。

现在我想在自定义的visualforce页面中显示已保存的图片。是否可以? 看起来<apex:image>无法使用。 <img href="{!cv.contentVersion}"...>也没有运气。

真正的问题是我成功上传了图片文件,但它的URL是什么? 我在google上使用随机URL进行测试,我可以显示图像(例如/../..some.jpg“)。但我无法弄清楚上传到contentversion的图像文件的绝对URL是什么

注意:这不是静态资源,因为我的用户可能会上传图片以经常更改用户图片。

代码

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

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

5 个答案:

答案 0 :(得分:3)

我认为目前的内容无法提供服务.ScottW提供的格式适用于文档。

我做的另一个选择是将包含我的图像的zip文件上传到静态资源,然后可以引用它。

答案 1 :(得分:2)

这应该有效:

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

根据我的经验,“thegogz”是正确的 - 目前无法直接从内容呈现图像。正如其他人所指出的那样,从文档和/或静态资源渲染确实有效,并且恕我直言使用文档是可取的,因为您可以在Apex中以编程方式访问URL,二进制数据等。

答案 4 :(得分:1)

  • 使用URL属性在标记中使用“/servlet/servlet.FileDownload?file=”显示图像。

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

了解更多信息, 访问Displaying Images in a Visual Force Page