项目中,常常需要用到文件的上传和下载,上传和下载功能实际上是对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了。如果篇中有描述错误的地方欢迎批评指正,如果有问题的欢迎留言。



转载于:https://www.cnblogs.com/zero-zyq/p/5752978.html

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

  1. 十二、文件上传与下载

    一.如何实现文件上传 要实现Web开发中的文件上传功能,通常需完成两步操作:一是在Web页面中添加上传输入项,二是在Servlet中读取上传文件的数据,并保存到本地硬盘中. 由于大多数文件的上传都是通 ...

  2. 第十二章 文件上传和下载

    目录 如何实现文件上传 文件上传的相关API 实现文件上传 实现文件下载 一.如何实现文件上传 要实现Web开发中的文件上传功能,通常需完成两步操作:一是在Web页面中添加上传输入项:二是在Servl ...

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

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

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

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

  5. Spring Boot基础学习笔记14:实现文件上传功能

    文章目录 零.学习目标 一.文件上传概述 二.实现文件上传功能 (一)创建Spring Boot项目 (二)整合Bootstrap (三)编写文件上传页面 (四)编写项目配置文件 (五)编写文件上传控 ...

  6. MonoRail学习笔记十五:文件上传

    在MonoRail中文件上传很简单,使用智能绑定方式后直接用HttpPostedFile类就可以进行操作了 vm文件: 1<h1 align="center">Uplo ...

  7. springboot---fastDFS 简单文件上传/下载/删除

    本来想简单的记录一下上传/下载,后来看着看着,发现这块的知识点太多.就记录下简单的操作,后面在补充 这里采用fastdfs分布式文件系统的形式来进行操作的(关于fastdfs的知识点有很多,这里就不赘 ...

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

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

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

    在classic环境中,salesforce提供了<apex:inputFile>标签用来实现附件的上传以及内容获取.salesforce 零基础学习(二十四)解析csv格式内容中有类似的 ...

最新文章

  1. vs2008格式化代码
  2. 鸿蒙系统手机还会出吗,华为最强手机即将到来,可能还有华为鸿蒙系统加入!你期待吗?...
  3. 剑指Offer(Java实现)扑克牌顺子
  4. 第二百一十七节,jQuery EasyUI,NumberSpinner(数字微调)组件
  5. 237. Delete Node in a Linked List
  6. SAP Spartacus checkout页面的入口逻辑
  7. vim 设置标签等操作
  8. Vivado入门使用指南之----按键消抖(仿真与在线逻辑分析仪仿真-不使用ip)
  9. matlab 指定路径保存图片_关于matlab图片保存方式
  10. 转【input type=file 标签禁止让用户手动输入】
  11. Creo曲面基础知识
  12. 简单的反编译class文件并重新编译的方法
  13. 让MAC在TouchBar显示网速
  14. python学而思和猿辅导哪个好_学而思和猿辅导哪个好,说说我的评价
  15. c++string 加引号_C++|引用计数与shared_ptr智能指针(以实现String类为例)
  16. 电脑微信截屏快捷键怎么取消
  17. 成都的IT研发产业和芯片产业等情况:2006年初的数据。
  18. 王者荣耀服务器不稳定,王者荣耀延迟460?可能是这六个原因导致的
  19. g700刷机包android5,华为G700线刷刷机教程_华为G700线刷rom包_救砖系统刷机包
  20. 调幅波解调-二极管峰值包络检波器【Multisim】【高频电子线路】

热门文章

  1. 【CCAI大咖秀】AlphaGo/Mobileye教父:智能科学需要融合机器学习、计算神经科学与认知科学
  2. YUV图像实时去雾算法的优化与改进
  3. winphone系统a、input标签被点击时产生的半透明灰色背景
  4. HDU 1853 MCMF
  5. SAXReader解析xml繁体字乱码问题
  6. 移动端web开发常见问题
  7. C++接口定义及实现举例
  8. Python入门 学习笔记
  9. 查看Linux服务器网卡流量小脚本shell和Python各一例
  10. Tomcat介绍及性能优化