salesforce 零基础学习(四十二)简单文件上传下载

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

一.文件上传功能

apex代码

 1 public with sharing class FileUploadUsedTransientController {
 2
 3     public transient Blob fileUploadBody{get;set;}
 4
 5     public String fileUploadName{get;set;}
 6
 7     public void uploadFile() {
 8         Document uploadFileDocument = new Document();
 9         Boolean needInsert = false;
10         if(fileUploadBody != null && fileUploadBody.size() > 0) {
11             uploadFileDocument.body = fileUploadBody;
12             needInsert = true;
13         }
14         if(fileUploadName != null) {
15             uploadFileDocument.Name = fileUploadName;
16             needInsert = true;
17         }
18
19         if(needInsert) {
20             try {
21                 uploadFileDocument.FolderId = ‘00528000002JyclAAC‘;
22                 insert uploadFileDocument;
23                 ApexPages.addMessage(new ApexPages.Message(ApexPages.severity.INFO,‘上传成功‘));
24             } catch(DmlException e) {
25                 ApexPages.addMessage(new ApexPages.Message(ApexPages.severity.ERROR,‘上传失败‘));
26             }
27         } else {
28             ApexPages.addMessage(new ApexPages.Message(ApexPages.severity.WARNING,‘无上传内容‘));
29         }
30     }
31 }

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

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

相应VF代码:

1 <apex:page controller="FileUploadUsedTransientController">
2     <apex:pageMessages />
3     <apex:form >
4     <apex:inputFile value="{!fileUploadBody}" fileName="{!fileUploadName}"/>
5     <apex:commandButton value="上传" action="{!uploadFile}"/>
6     </apex:form>
7 </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代码:

 1 public with sharing class FileDownloadController {
 2
 3     public String documentId = ‘‘;
 4
 5     public FileDownloadController() {
 6         init();
 7     }
 8
 9     public Boolean showDownload{get;set;}
10
11     public FileDownloadController(ApexPages.StandardController controller) {
12         init();
13     }
14
15     public void init() {
16         Map<String,String> paramMap = ApexPages.currentPage().getParameters();
17         if(paramMap.get(‘documentId‘) != null) {
18             documentId = paramMap.get(‘documentId‘);
19             showDownload = true;
20         } else {
21             showDownload = false;
22         }
23     }
24
25     public String downloadURL{
26         get {
27             String urlBase = ‘/servlet/servlet.FileDownload?file=‘ + documentId;
28             return urlBase;
29         }
30     }
31 }

相应VF页面如下:

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

运行效果:

1.参数中没有documentId情况

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

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

时间: 2024-12-06 11:10:18

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

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

通常在 WebUI 自动化测试过程中必然会涉及到文件上传的自动化测试需求,而开发在进行相应的技术实现是不同的,粗略可划分为两类:input标签类(类型为file)和非input标签类(例如:div.a或其他方式结合实现). 非input标签类因其有各式各样的实现方式,需要考虑具体的场景,因而此文对此类文件上传不做讲解,以input标签实现文件上传的方式进行讲解,请知悉! 解决方案有如下三种: 1.定位元素直接通过sendkeys修改input标签的文件链接: 2.通过第三方控件(AutoIt)编

SpringBoot入门十九,简单文件上传

项目基本配置参考SpringBoot入门一,使用myEclipse新建一个SpringBoot项目,使用myEclipse新建一个SpringBoot项目即可.现在来给项目添加一个MyBatis支持,添加方式非常简单,仅需两步即可,具体内容如下: 1. pom.xml添加以下配置信息 <!-- 文件上传配置开始 --> <!-- 9.引入commons-io依赖 --> <dependency> <groupId>commons-io</groupId

学习笔记(十一)文件上传下载

5. 文件下载的需求: 1). 在文件上传成功后的 success.jsp 页面上提供一个 "下载资源" 的超链接 2). 点击 "下载资源" 的超链接, 会把请求发送到 Servlet, 读取数据库, 在页面上显示可以下载的资源信息 FileName: 11.尚硅谷_JavaWEB_监听器.pptxDesc: AA下载 FileName: 12.尚硅谷_JavaWEB_文件的上传和下载.pptxDesc: BB下载 3). 再点击下载, 即可完成对应文件的下载.

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

我们在做项目时经常会使用changeset作为部署工具,但是某些场景使用changeset会比较难操作,比如当我们在sandbox将apex class更改名字想要部署到生产的org或者其他环境的org,使用changeset是没法实现的,这个时候我们需要使用Ant Migration Tool还是更好的. salesforce基于metadata进行管理,Ant Migration Tool 是一个基于 Java/Ant的命令行工具用于将metadata从本地迁移至Sales Org. Mig

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

Permission sets以及Profile是常见的设置访问权限的方式. Profile规则为'who see what'.通过Profile可以将一类的用户设置相同的访问权限.对于有着相同Profile但是对于某个表,某个字段,或者某个Apex类等却可以有不同访问权限,这个时候就要用到Permission sets.  Permission sets 配置 1.点击setup->Administer->Manage Users->Permission Sets进入Permissio

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

第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. 十七篇链接:salesforce 零基础学习(十七)Trigger用法 有的时候对于sObject的trigger处理复杂的情况下,比如一个sObject的before update要实现功能1,2.....n功能情况下,Handler中需要在before update写实现功能1--n的代码.然而

salesforce零基础学习(八十二)审批邮件获取最终审批人和审批意见

项目中,审批操作无处不在.配置审批流时,我们有时候会用到queue,related user设置当前步骤的审批人,审批人可以一个或者多个.当审批人有多个时,邮件中获取当前记录的审批人和审批意见就不能随便的取一个审批人了,有以下方式针对不同的场景可以获取到当前记录的最终审批人以及审批意见. 邮件内容使用以下几种方式实现: 1.代码里面实现邮件发送 2.email template(text/html/custom) 3.visualforce emailTemplate 对发送邮件方式不清楚的,可

salesforce零基础学习(八十九)使用 input type=file 以及RemoteAction方式上传附件

在classic环境中,salesforce提供了<apex:inputFile>标签用来实现附件的上传以及内容获取.salesforce 零基础学习(二十四)解析csv格式内容中有类似的使用此标签进行解析附件内容,后台只要声明String类型变量用来存储附件名称,Blob类型变量用来存储附件的内容即可. 但是当我们的项目整体使用第三方的前端框架,例如VUE或者angular等前端框架时,有时使用apex:inputFile反而不是很方便,需要用到html的原生的附件上传的标签<inpu

salesforce零基础学习(八十七)Apex 中Picklist类型通过Control 字段值获取Dependent List 值

注:本篇解决方案内容实现转自:http://mysalesforceescapade.blogspot.com/2015/03/getting-dependent-picklist-values-from.html 群里面有个小伙伴问了一个关于两个有Dependence关系的Picklist字段如何在Apex中通过control字段的值获取到Dependence字段的值,针对Salesforce配置来说,我们很好配置出两个Dependence字段的关系,通过点击设置一下include关系即可.如