起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 41878|回复: 24

java代码实现上传文件到文档服务器、下载文档服务器文件

  [复制链接]

6

主题

295

帖子

988

积分

高级会员

Rank: 4

积分
988
发表于 2012-12-21 10:55:44 | 显示全部楼层 |阅读模式
需要完成下载->修改->上传这三个步骤
平台有提供对应的api吗?
动脑不费电

论坛不认识milan,学会X5也枉然

10

主题

897

帖子

1909

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1909
QQ
发表于 2012-12-21 13:15:55 | 显示全部楼层
  1. /**
  2.                  首先我们来理解下关于文档的api
  3.                  文档相关api都在这2个package下面
  4.                  
  5.                  package :com.justep.doc
  6.                  Class :Docs Doc DocUtils
  7.                  其中Docs是一组Doc和合集也就是Doc的容器类 Doc对应的是文档对象DocUtils是文档相关的常用函数
  8.                  package :com.justep.doc.attachment
  9.                  Class: Attachments Attachment 等
  10.                  这里面主要是和附件相关的,我们认为Attachment是Doc作为附件形式的对象,当然这个package里面还有和附件相关的其他类 比如文档关联(AttachmentDefine)
  11.                  
  12.                  
  13.                  
  14.                  首先 :我们要明白一个概念
  15.                      文档的root-path
  16.                          在x5中文档服务器可以分布式部署的,也就是说你可以连接多个x5的文档服务器来保存文件,那么你这次这个文件放到哪个文档服务上里?
  17.                          在x5中是通过root-path来标识,不同的文档服务器的标识root-path是不同的(关于这块的详细理解 请参考关于文档相关的视频或者文档)
  18.                  */
  19.                
  20.                 /**
  21.                  * 1.这里我们先看看怎么上传一个文档
  22.                  * 首先我们建立个存储doc的容器
  23.                  */
  24.                 {
  25.                 Docs docs = new Docs();
  26.                 /**
  27.                          然后我们在这个容器中新建一个文档  
  28.                                  参数:sParentId 就是说你把这个文件展现到文档中心的哪个目录下
  29.                                 注意:真实物理文件存储位置是在DocServer配置的data目录中
  30.                         不理解文档中心目录和物理位置关系的同学 请看www.justep.com视频
  31.                  */
  32.                 Doc doc = docs.addDoc("defaultDocNameSpace");
  33.                
  34.                 File f = new File("c:/book.xls");
  35.                 /**
  36.                  * 现在doc还只是文档中心树上的一个节点没有关联上任何的物理文件
  37.                  * 调用upload方法,文件就传到DocServer中了 ,节点和物理文件也关联上了
  38.                  */
  39.                 doc.upload(f);
  40.                
  41.                 /**
  42.                  * 成文,也就是说你这些操作要提交了,其中该保存数据库的的保存数据库,该生成上传日志的帮我记录好日志(SA_DocLog中有记录哦)
  43.                  *  不理解成文和保存的区别的看视频把
  44.                  */
  45.                 docs.createVersion();
  46.                 /**
  47.                  * 搞定 上传完了 现在你可以看看你刚才上传的文件的fileId是多少等等 都可以通过doc.getXXX
  48.                     String fileId = doc.getsFileID();
  49.                         System.out.println("产生的fileId是:"+fileId);
  50.                  */
  51.                 }
  52.                 /**
  53.                  * 2. 接下来我们看下载
  54.                  *
  55.                  */
  56.                 {
  57.                 Docs docs = new Docs();
  58.                 /**
  59.                  *  query(docId, docPath, pattern, orderBy, custom)
  60.                  *  docId 如果你只要一个文件 那么传你的docId
  61.                  *  docPath 说的是你要查询文档中心那颗文档树上那个节点下的文档
  62.                  *  pattern 你要查询那些信息  文档名字,文档大小  你就理解为sql中select部分把
  63.                  *  orderBy 排序 我不用解释了把
  64.                  *  custom 如果你还有自定意的过滤条件你就写把 你就理解为sql中wherer部分
  65.                  *  
  66.                  *  下面我这行意思就是 我要拿/defaultDocNameSpace/0e29f353-c9d0-4bdc-8e48-647ceb9dbe62 这个节点下的所有文件 ,然后获取(get)其中docId为C581B536B8200001D99837D81ED4D2B0的doc
  67.                  *  
  68.                  *  当然你要写成  docs.query("C581B536B8200001D99837D81ED4D2B0", "/defaultDocNameSpace/0e29f353-c9d0-4bdc-8e48-647ceb9dbe62", null, null, null)
  69.                  *  那么恭喜你已经理解了哈  
  70.                  *  其实docs.query("C581B536B8200001D99837D81ED4D2B0", null, null, null, null)就行
  71.                  *  
  72.                  */
  73.                 Doc doc = docs.query(null, "/defaultDocNameSpace/0e29f353-c9d0-4bdc-8e48-647ceb9dbe62", null, null, null).get("C581B536B8200001D99837D81ED4D2B0");
  74.                 File outPutFile =new File("c:/"+doc.getsDocName());
  75.                
  76.                 doc.download(new FileOutputStream(outPutFile));
  77.                 /**
  78.                  * 去你C盘下看看把 是不是有个文件了
  79.                  */
  80.                 }
  81.                
  82.                 /**
  83.                  * 3. 我们来看 修改后的保存 上传 成文
  84.                  */
  85.                 String docId = "C581B536B8200001D99837D81ED4D2B0";
  86.                 Docs docs = new Docs().query(docId, "/defaultDocNameSpace/0e29f353-c9d0-4bdc-8e48-647ceb9dbe62", null, null, null);
  87.                
  88.                 Doc doc = docs.get(docId);
  89.                
  90.                 /**
  91.                  * 上面 我不解释了
  92.                  * lock 这个很重要,你要修改文件 一定要先锁上 再改哦 ,要不你保证不住多人修改文件的情况,所以我不存数据库的只修改java对象。
  93.                  */
  94.                 DocUtils.lock(docId);
  95.                 doc.setsDocName("b.bin");
  96.                 //doc.getRow().setDateTime("sLastWriteTime",Timestamp);
  97.                 doc.upload(new File("c:/boot.ini"));
  98.                 /**
  99.                  * 熟悉第一步的你已经懂了
  100.                  * 这里 如果你addDoc的 也就是new的 就新建一个
  101.                  * 如果是query的 edit的 就 修改形成文档新版本
  102.                  *
  103.                  * 注意 修改的情况
  104.                  * 1. 修改文件内容  那么这个逻辑可以
  105.                  *  
  106.                  * 2. 不修改文件只修改文件属性那么  需要设置
  107.                  * docs.setIsEditInfo(true);
  108.                  */
  109.                 docs.createVersion();
复制代码
qq上找我时候,不要问我在不,直接发问题,我看到后会去论坛回复你的帖子。

10

主题

897

帖子

1909

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1909
QQ
发表于 2012-12-21 17:56:16 | 显示全部楼层
以上代码 主要用来介绍api 里面有写地方需要理解代码后自己注意,千万不要照抄
比如docs.get(docId); 你应该考虑 docId不再docs里面后返回的doc是null的情况
lock的时候 已经有别人锁上了 根据返回值来判断是否已经锁上的情况。

qq上找我时候,不要问我在不,直接发问题,我看到后会去论坛回复你的帖子。

10

主题

897

帖子

1909

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1909
QQ
发表于 2013-1-15 09:30:20 | 显示全部楼层
如果要在java中获取url需要调用
com.justep.doc.DocAdapter.queryHost(Boolean isHttps, String docPath,
   String urlPattern, Boolean isFormAction);
比如你的已知数据是
[{"docID":"C490A0A0-F170-0001-3E32-119C17711D64","docName":"MN-2-011-31.pdf","size":522021,"fileID":"2313-DOC","docPath":"/A226C50E-2EBD-4E05-B16B-5074B3149AD0"}]
那么isHttps传false,
docPath就是/A226C50E-2EBD-4E05-B16B-5074B3149AD0
urlPattern分为:
  上传  /repository/file/cache/upload
  下载    /repository/file/download
  参看    /repository/file/view
   officeViewer组件上传的office文件的url    /repository/file/cache/office/
  附件上传的临时文件的提交   /repository/file/cache/commit   (一般和数据库的保存事件在一个事务中完成)
isFormAction是考虑到如果前台采用form提交的时候会有跨域访问需要特殊处理的时候的参数,如果你不理解建议你传true
以上方法是带权限的,也就是说你想拿这个url那么当前登录人在文档中心必须有这个文件的相应权限,如果你不想关注文档中心的权限可以调用函数queryNoPermissionHost。

如果要在js中获取url :
justep.Doc.getdocServerAction(docPath, urlPattern, isFormAction);
参数我就不解释了和上面一样。调用上面函数需要引用js文件 system\service\doc\docUtil.js


qq上找我时候,不要问我在不,直接发问题,我看到后会去论坛回复你的帖子。

197

主题

824

帖子

1889

积分

金牌会员

Rank: 6Rank: 6

积分
1889
QQ
发表于 2013-1-23 17:54:15 | 显示全部楼层
收藏了!
QQ:574178224

1

主题

5

帖子

65

积分

初级会员

Rank: 2

积分
65
发表于 2013-3-2 11:05:22 | 显示全部楼层
收藏!

10

主题

897

帖子

1909

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1909
QQ
发表于 2013-6-7 16:01:17 | 显示全部楼层
本帖最后由 007slm 于 2013-7-19 09:52 编辑

同样如果需要删除附件 可以在通过Docs.deleteDoc(boolean isHttps, boolean isLogicDelete, Doc doc) 就可以删除了。
qq上找我时候,不要问我在不,直接发问题,我看到后会去论坛回复你的帖子。

77

主题

993

帖子

2225

积分

金牌会员

Rank: 6Rank: 6

积分
2225
QQ
发表于 2013-7-21 14:17:05 | 显示全部楼层
007slm 发表于 2013-6-7 16:01
同样如果需要删除附件 可以在通过Docs.deleteDoc(boolean isHttps, boolean isLogicDelete, Doc doc) 就可 ...

请问前2个参数是什么意思呢,要把文档中心的实体文件删除!!

10

主题

897

帖子

1909

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1909
QQ
发表于 2013-7-22 09:13:31 | 显示全部楼层
isHttps是说你的文档服务器是不是https连接的,不确定传true就行,isLogicDelete的意思是是否是逻辑删除,false就是物理删除。
qq上找我时候,不要问我在不,直接发问题,我看到后会去论坛回复你的帖子。

77

主题

993

帖子

2225

积分

金牌会员

Rank: 6Rank: 6

积分
2225
QQ
发表于 2013-7-22 09:57:11 | 显示全部楼层
007slm 发表于 2013-7-22 09:13
isHttps是说你的文档服务器是不是https连接的,不确定传true就行,isLogicDelete的意思是是否是逻辑删除,f ...

非常感谢
!!
高级模式
B Color Image Link Quote Code Smilies

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-11-21 23:30 , Processed in 0.059714 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表