项目中,常常需要用到文件的上传和下载,上传和下载功能实际上是对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. 使用hibernate可以优化的地方

    a.  在查询字符串中,应该总是使用jdbc的占位符?,或使用使用命名参数:,不要自查询中使用字符串值来代替非常量值. b.  Flush会影响性能,频繁刷新影响性能,尽量减少不必要的刷新. c.   ...

  2. .net配置文件读取

    public static string LogPath { get { return AppSettingValue(); } } public static string AppSettingVa ...

  3. Spring MVC 流程图(转)

    Spring MVC工作流程图   图一   图二    Spring工作流程描述       1. 用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServle ...

  4. 利用nodejs实现登录并转码视频(原创)

    nodejs的出现让前端人员可以使用js打造后台,也许哪天就真的摆脱了对java或者php的依赖了. 今天跟大家分享一个利用nodejs接受前端post请求,并实现视频转码的这样一个例子.视频转码用到 ...

  5. 用户图形界面(GUI)学习笔记(一)——Swing与AWT

    一.Swing与AWT 对象窗口工具箱(Abstact Window Toolkit,AWT),是JAVA1.0刚出现的时候,包含的一个GUI设计类库.它将处理用户界面元素的任务委派给每个目标平台(W ...

  6. JavaScript 笔记

    function (函数)document(文档 get获得文档中..) <script type="text/javascript"> function yz(){ ...

  7. 0002--Weekly Meeting on 27th March and 3th April, 2015

    27th March, 2015 (1) RankNet && PageRank ->reporter: jinquan Du   Web_RankNet  Web_PageRa ...

  8. Android消息队列和Looper

    1. 什么是消息队列 消息队列在android中对应MessageQueue这个类,顾名思义,消息队列中存放了大量的消息(Message) 2.什么是消息 消息(Message)代表一个行为(what ...

  9. 一个简单的RMAN自动备份脚本

    rman备份脚本: #!/bin/bashsource /home/oracle/.bash_profile rman target / << EOFrun {allocate chann ...

  10. php+mysql+apache+nginx

    http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/07/3003278.html 安装mysql rpm -qa | grep mysql ...