项目中,常常需要用到文件的上传和下载,上传和下载功能实际上是对Document对象进行insert和查询操作.本篇演示简单的文件上传和下载,理论上文件上传后应该将ID作为操作表的字段存储,这里只演示文件上传到Document对象中。

一.文件上传功能

apex代码

 public with sharing class FileUploadUsedTransientController {

     public transient Blob fileUploadBody{get;set;}

     public String fileUploadName{get;set;}

     public void uploadFile() {
Document uploadFileDocument = new Document();
Boolean needInsert = false;
if(fileUploadBody != null && fileUploadBody.size() > 0) {
uploadFileDocument.body = fileUploadBody;
needInsert = true;
}
if(fileUploadName != null) {
uploadFileDocument.Name = fileUploadName;
needInsert = true;
} if(needInsert) {
try {
uploadFileDocument.FolderId = '00528000002JyclAAC';
insert uploadFileDocument;
ApexPages.addMessage(new ApexPages.Message(ApexPages.severity.INFO,'上传成功'));
} catch(DmlException e) {
ApexPages.addMessage(new ApexPages.Message(ApexPages.severity.ERROR,'上传失败'));
}
} else {
ApexPages.addMessage(new ApexPages.Message(ApexPages.severity.WARNING,'无上传内容'));
}
}
}

这里Blob对象用来绑定前台的inputFile的value值,因为VF页面最大允许内存135K,所以Blob对象声明transient类型。如果上传一个超过135K的文件并且点击保存以后,

Blob对象不声明transient或者在insert以后不将Blob对象置为null,则页面将会超过135K,页面会崩溃。

相应VF代码:

 <apex:page controller="FileUploadUsedTransientController">
<apex:pageMessages />
<apex:form >
<apex:inputFile value="{!fileUploadBody}" fileName="{!fileUploadName}"/>
<apex:commandButton value="上传" action="{!uploadFile}"/>
</apex:form>
</apex:page>

运行效果:

1.什么都没有选择情况下点击上传按钮

2.选择文件后点击上传按钮

以上代码只是演示最基本的上传功能,项目中通常一个sObject创建一个字段用来存储document的ID信息,当insert上传的Document以后将document的ID存储在sObject的字段中。

二.页面下载功能

文件上传自然便有文件下载或者文件预览功能,项目中通常在sObject中有一个字段存放Document的ID,那样可以直接通过记录来获取到相应的document的ID。SFDC提供了通过servlet方式下载相关document资源,访问方式为host/servlet/servlet.FileDownload?file=' + documentId

此处模拟通过传递documentId参数来实现下载的功能页面。

apex代码:

 public with sharing class FileDownloadController {

     public String documentId = '';

     public FileDownloadController() {
init();
} public Boolean showDownload{get;set;} public FileDownloadController(ApexPages.StandardController controller) {
init();
} public void init() {
Map<String,String> paramMap = ApexPages.currentPage().getParameters();
if(paramMap.get('documentId') != null) {
documentId = paramMap.get('documentId');
showDownload = true;
} else {
showDownload = false;
}
} public String downloadURL{
get {
String urlBase = '/servlet/servlet.FileDownload?file=' + documentId;
return urlBase;
}
}
}

相应VF页面如下:

 <apex:page controller="FileDownloadController">
<apex:outputLink value="{!downloadURL}" rendered="{!showDownload == true}">下载</apex:outputLink>
</apex:page>

运行效果:

1.参数中没有documentId情况

2.参数中有documentId情况,点击下载后便可以下载此ID对应的document资源。

总结:本篇只是描述很简单的文件上传下载功能,上传的时候注意Blob对象如果绑定前台的inputFile情况下,要注意使用transient声明或者insert以后将值置成空就OK了。如果篇中有描述错误的地方欢迎批评指正,如果有问题的欢迎留言。

salesforce 零基础学习(四十二)简单文件上传下载的更多相关文章

  1. Selenium2学习-039-WebUI自动化实战实例-文件上传下载

    通常在 WebUI 自动化测试过程中必然会涉及到文件上传的自动化测试需求,而开发在进行相应的技术实现是不同的,粗略可划分为两类:input标签类(类型为file)和非input标签类(例如:div.a ...

  2. Javaweb学习笔记——(二十二)——————文件上传、下载、Javamail

    文件上传概述      1.文件上传的作用          例如网络硬盘,就是用来上传下载文件的.          在网络浏览器中,时常需要上传照片 2.文件上传对页面的要求          上 ...

  3. salesforce零基础学习(一百二十)快去迁移你的代码中的 Alert / Confirm 以及 Prompt吧

    本篇参考: https://developer.salesforce.com/blogs/2022/01/preparing-your-components-for-the-removal-of-al ...

  4. salesforce零基础学习(九十二)使用Ant Migration Tool 实现Metadata迁移

    我们在做项目时经常会使用changeset作为部署工具,但是某些场景使用changeset会比较难操作,比如当我们在sandbox将apex class更改名字想要部署到生产的org或者其他环境的or ...

  5. salesforce 零基础学习(十八)WorkFlow介绍及用法

    说起workflow大家肯定都不陌生,这里简单介绍一下salesforce中什么情况下使用workflow. 当你分配许多任务,定期发送电子邮件,记录修改时,可以通过自动配置workflow来完成以上 ...

  6. salesforce 零基础学习(十九)Permission sets 讲解及设置

    Permission sets以及Profile是常见的设置访问权限的方式. Profile规则为'who see what'.通过Profile可以将一类的用户设置相同的访问权限.对于有着相同Pro ...

  7. salesforce 零基础学习(十六)Validation Rules & Date/time

    上一篇介绍的内容为Formula,其中的Date/time部分未指出,此篇主要介绍Date/time部分以及Validation rules. 本篇参考PDF: Date/time:https://r ...

  8. linux常用命令(二)文件上传下载及软件安装

    1.上传下载工具安装 (1)WINDOWS 到linux的文件上传及下载: windows下打开secureCRT,通过SSH连到⾄至远程linux主机:上传下载工具安装命令:yum -y insta ...

  9. salesforce 零基础学习(五十二)Trigger使用篇(二)

    第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. ...

随机推荐

  1. Everything搜索结果显示0 Object

    比较过windows本身的文档搜索功能,Everything的本地文档搜索能力简直令人咋舌,更逆天的是软件本身体积很小. 问题:打开everything时,文件列表消失,软件下方信息为0 object ...

  2. ArcGIS API ArcGISDynamicMapServiceLayer.setVisibleLayers对带有GroupLayer图层组的数据无效(针对LayerInfo)问题探讨

    首先看下setVisibleLayers方法: setVisibleLayers(ids, doNotRefresh?) Sets the visible layers of the exported ...

  3. berkeley db 内存池分配机制

    __memp_alloc() 注: MPOOL_ALLOC_SEARCH_DYN 没有 出现在 bdb document上, 也没出现在 除了mp_alloc外的代码里. 先删了 以便代码清楚. 按 ...

  4. BNUOJ 51279[组队活动 Large](cdq分治+FFT)

    传送门 大意:ACM校队一共有n名队员,从1到n标号,现在n名队员要组成若干支队伍,每支队伍至多有m名队员,求一共有多少种不同的组队方案.两个组队方案被视为不同的,当且仅当存在至少一名队员在两种方案中 ...

  5. C# IGUID的生成

    GUID(全局统一标识符)是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的.通常平台会提供生成GUID的API.生成算法很有意思,用到了以太网卡地址.纳秒级时间.芯片ID码和许多可 ...

  6. WIN8应用隐私声明

    隐私权声明 本应用连接网络仅为控制硬件设备,不会收集你的个人信息,也不共享你个个人信息. 应用名称 雅典娜移动客户端 关于本应用 本应仅为控制设备应用,不关注任何配置相关信息,所有数据均来自服务器端. ...

  7. 关于placeholder中 文字添加换行 用转义字符&#13;&#10;代替<br>

    今天遇到一个问题 UI给的效果图中 文本域的提示文字 是两行显示, 于是就想到placeholder中能否解析html标签, 尝试后发现并无卵用, 经过调查后发现 可以用转义字符代替<br> ...

  8. sqlserver 读取xml 字符串方法

    declare @xml xml declare @propertyName varchar(50)  declare @str nvarchar(max)   set @propertyName = ...

  9. ubuntu常用配置

    安装文件共享服务 0.更改本机主机名,修改 /etc/hostname文件(ubuntu默认都是ubuntu) 1.安装 #sudo apt-get install samba samba-commo ...

  10. Swift 对比学习 (二)

    书接上回,可以作为参数和返回值的函数数型,以及嵌套函数,绝对继承了动态语言的优良传统: 函数嵌套了,那必然少不了闭包问题,Swift的闭包表达式语法也蛮有趣的. { (paraeeters) -> ...