20170623
来源:互联网 发布:李乐的霍去病 知乎 编辑:程序博客网 时间:2024/06/03 15:55
Row row = rows.next();
String v = row.getString("fPictureName");
JSONArray ja = JSONArray.parseArray(v);
for(int i=0;i<ja.size();i++){
JSONObject jsonObject=ja.getJSONObject(i);
String docPaths =jsonObject.getString("docPath");
String docID = jsonObject.getString("docID");
//下载图片,获取图片的 docPath,docID,根据参数下载图片,一个字段存在多个图片,处理方法为迭代器
Docs docs = new Docs();
Doc doc = docs.query(null,docPaths, null, null, null).get(docID);
File outPutFile =new File("c:/"+doc.getsDocName());
try {
doc.download(new FileOutputStream(outPutFile));
} catch (FileNotFoundException e) {
// TODO 自动生成的 catch 块
JSONArray jsonArray = new JSONArray();
JSONObject obj = JSONObject.parseObject("{FileID:\""+fileId5+"\",DocPath:\""+docPath5+"\"}");
jsonArray.add(obj);
json = jsonArray.toString();
jieshou
if (data.state) {
Qduan.deleteAllData();
var str = eval(data.response);
for (var i = 0; i < str.length; i++) {
Qduan.newData();
Qduan.setValue("strID", str[i].fID);
Qduan.setValue("strName", str[i].fName);
Detail.setValue("fUnitID", str[0].fID);
Detail.setValue("fUnitName", str[0].fName);
}
}
一、JSONObject和JSONArray的数据表示形式
JSONObject的数据是用 { } 来表示的,
例如: { "id" : "123", "courseID" : "huangt-test", "title" : "提交作业", "content" : null }
而JSONArray,顾名思义是由JSONObject构成的数组,用 [ { } , { } , ...... , { } ] 来表示
例如: [ { "id" : "123", "courseID" : "huangt-test", "title" : "提交作业" } , { "content" : null, "beginTime" : 1398873600000 "endTime" } ] ;
表示了包含2个JSONObject的JSONArray。
可以看到一个很明显的区别,一个最外面用的是 { } ,一个最外面用的是 [ ] ;
二、如何从字符串String获得JSONObject对象和JSONArray对象
JSONObject jsonObject = new JSONObject ( String str);
JSONArray jsonArray = new JSONArray(String str ) ;
三、如何从JSONArray中获得JSONObject对象
大家可以把JSONArray当成一般的数组来对待,只是获取的数据内数据的方法不一样
JSONObject jsonObject = jsonArray.getJSONObject(i) ;
四、获取JSON内的数据
int mid= jsonObject.getInt ( "id" ) ; // 这里的mid得到的数据就是123.
String mcourse=jsonObject.getString( " courseID") ; // 这里的mcourse得到的数据就是huangt-test.
javascript 对象
1 attachmentSimple.js修改
initUploader:function(){
var self = this;
var actionUrl = require.toUrl(this.actionUrl);
self.uploader = new Uploader(self.$domNode.find('.x-item-upload'),{
actionUrl:actionUrl,
compress: this.compress,
accept:this.accept
});
self.uploader.retCode = ''; // TODO: 增加retCode字段 2017-02-09
getFileUrl : function(realFileName,storeFileName,ownerID,operateType){
var url = new justep.URL(this.actionUrl);
url.setParam('storeFileName',storeFileName);
url.setParam('ownerID',ownerID);
url.setParam('realFileName',realFileName);
url.setParam('operateType',operateType);
url.setParam('retCode', ((this.uploader.retCode) ? this.uploader.retCode: '')); // TODO: 增加retCode字段参数 2017-02-09
return require.toUrl(url.toString());
},
addItem : function(realFileName,storeFileName,ownerID){
var items = this.getItems();
items.push({
storeFileName :storeFileName,
realFileName : realFileName,
retCode: (this.uploader.retCode) ? this.uploader.retCode: '' // TODO: 增加retCode字段 2017-02-09
});
this.bindData.setValueByID(this.bindRelation,JSON.stringify(items),ownerID);
},
2 调用处对attachmentSimple做定制
/**
* 自定义attachmentSimple1
*/
Model.prototype.reInitAttachmentSimple = function(attachment) {
var self = this;
// 自定义图片显示路径
attachment.previewPicture = function($object){
//console.log("attachment.previewPicture");
var url = $object.retCode.get();
if(url){
return "url('"+url+"')";
}
};
// 自定义图片下载路径
attachment.downloadFile = function(realFileName,storeFileName,ownerID){
//console.log("attachment.downloadFile");
var val = attachment.bindData.getValueByID('att', ownerID);
var data = [];
if(val) {
try {
data = JSON.parse(val);
} catch(e) {
if(console){
console.log("绑定的数据解析失败[value:"+val+"]",e);
}
data =[];
}
$.each(data, function(index, obj) {
if (obj.storeFileName == storeFileName) {
var fileApi = require("$UI/system/components/justep/docCommon/fileApi");
var url = obj.retCode;
url && fileApi.browse(url);
return false;
}
});
}
};
// 增加删除文件事件
attachment.removeItemByStoreID = function(storeFileName, ownerID){
var items = attachment.getItems(ownerID);
var delItem = null;
if(items) {
for(var i =0; i<items.length; i++){
if(items[i].storeFileName == storeFileName){
delItem = items.splice(i,1);
break;
}
}
}
attachment.bindData.setValueByID(attachment.bindRelation, JSON.stringify(items), ownerID);
// -- 判断是否达到图片上限 -- //
var attVal = attachment.bindData.getValue("att");
if (attVal && $.parseJSON(attVal).length < 5) {
$('.x-item-upload.x-upload-hide').removeClass('x-upload-hide'); // 显示上传
}
/*if (delItem) { // TODO: 这里添加删除事件
var url = ;
$.ajax({
url:url,
cache:false,
async:false
}).fail(function(){
throw "delFile error";
});
}*/
}
};
//判断只要特定的文件类型可以上传
uploader.on('onFileSelected',function(event){
var fileType = event.file.type;
//自己判断fileType,如果不符合条件用cancel为true终止选择文件
if(fileType != "image/jpeg" && fileType != "image/png" && fileType != "image/gif"){
event.cancel = true;
project.alert("请上传图片!");
}
//限制大小
$.each(event.files, function(i, file) {
if (file.size > 10485760) {// 10M
project.alert("上传的文件大小不能超过10MB");
event.cancel = true;
return;
}
});
//限制文件个数
var preNum = $.parseJSON(data.getValue("att")).length; // 默认给att赋值“[]”
var curNum = event.files.length;
if (preNum + curNum > 5) {
project.alert("最多上传5个文件!");
event.cancel = true;
return;
}
});
uploader.un('onSuccess');
uploader.on('onSuccess', function(event){
var statusCode = event.response.statusCode;
var message = event.response.message;
if (statusCode == '200') {
uploader.retCode = message;
// -- 执行原始组件的onSuccess回调方法 -- //
attachmentSimple1.$domNode.find('.x-doc-process-bar').hide().css('width','0%');
var _data = {
source: attachmentSimple1,
data:event.data,
fileName:event.data.fileName
};
attachmentSimple1.fireEvent('onSuccess',_data);
attachmentSimple1.changeState("upload");
attachmentSimple1.addItem(_data.data.fileName,_data.data.storeFileName,_data.data.ownerID);
// -- 判断是否达到图片上限 -- //
var attVal = data.getValue("att");
if (attVal && $.parseJSON(attVal).length >= 5) {
$('.x-item-upload').addClass('x-upload-hide');//隐藏上传
}
} else {
project.alert('上传图片失败!');
// 重置进度条
attachmentSimple1.$domNode.find('.x-doc-process-bar').hide().css('width','0%');
}
});
[{"docID":"C79279A4C000000148FC65DE8BA01E8F","docName":"timg (12).jpg","size":"33055","docPath":"/defaultDocNameSpace","fileID":"1163-defaultDocNameSpace","time":"2017-06-19T13:56:41.197Z"}]
[{"docID":"D96E64B69BE04770B264661634922929","docName":"timg (12).jpg","size":"44111.0","docPath":"/defaultDocNameSpace","fileID":"1164-defaultDocNameSpace","time":"2017-06-19 13:57:26.784"}]
/UI2/system/service/doc/common/uploadDoc.j?dochost=http://192.168.1.100:8088/DocServer/repository/file/view/1166-defaultDocNameSpace/last/content?key=63c386a3db4f2e240d7ab67834d4c2949d566a602463c1be9d7726a84ea5a603f354cb841844dc7f16fc336669bb60036eaaae7560bd4534e3e4fc011bc5b2546d8e7b8609a880a6747255a2f2de8e2ecac810cc37316d3d27838561f27a224495e99a9882be69a8592e8d14c15ee476
[{"docID":"C7927B401EC000017FDD1B4D13748320","docName":"timg (19).jpg","size":"2034973","docPath":"/defaultDocNameSpace","fileID":"1178-defaultDocNameSpace","time":"2017-06-19T14:24:47.012Z"}]
http://127.0.0.1:8080/x5/UI2/v_e4032137edeb42309ed97346fd303a64l_zh_CNs_d_m/system/service/doc/common/uploadDoc.j?dochost=http://192.168.1.100:8088/DocServer/repository/file/view/1178-defaultDocNameSpace/last/content?key=63c386a3db4f2e240d7ab67834d4c2949d566a602463c1be9d7726a84ea5a603f354cb841844dc7f16fc336669bb60036eaaae7560bd45342575a5042b32c8e66d8e7b8609a880a6747255a2f2de8e2ecac810cc37316d3d27838561f27a224448b79b2280b97522dd4306f3c0d248f7
var url = "";
var name = "";
//遍历JSON
if(jsonList.length>0){
for(var i = 0;i<jsonList.length;i++){
var docPath = jsonList[i]["docPath"];
var fileID = jsonList[i]["fileID"];
var docName = jsonList[i]["docName"];
var docID = jsonList[i]["docID"];
name = docName.split(".")[i];
url = DocUtils.InnerUtils.getdocServerAction({
"docPath":docPath,
urlPattern:"/repository/file/view/"+fileID+"/last/content",
isFromAction :false,
context: this.getContext(),
useCookie : false
});
//调用API
url = url.indexOf(window.location.protocol) < 1 ? url : window.location.protocol + "//" + window.location.host + url;
var a= "/repository/file/view/"+fileID+"/last/content";
data.setValue("fFile", url);
data.setValue("fZBID",fBZID);
// data.refreshData();
// alert("已经上传了");
http://127.0.0.1:8080/x5/UI2/v_ed07d83a111e44b4b9087e9e81be8a8al_zh_CNs_d_m/system/service/doc/common/uploadDoc.j?dochost=http://192.168.1.100:8088/DocServer/repository/file/view/1135-defaultDocNameSpace/last/content?key=63c386a3db4f2e240d7ab67834d4c2949d566a602463c1be9d7726a84ea5a603f354cb841844dc7f16fc336669bb60036eaaae7560bd4534b541391e4bf825286d8e7b8609a880a6747255a2f2de8e2ecac810cc37316d3d27838561f27a2244734673618129b79a2801c4fed38c967f
[{"docID":"C7926DEC5FD000014C5A4F1086801E27","docName":"timg (18).jpg","size":"133046.0","docPath":"/defaultDocNameSpace","fileID":"1156-defaultDocNameSpace","time":"2017-06-19 10:31:53.767"}]
[{
"docID":"C7926DF104700001896711669DEBB9B0",
"docName":"timg (18).jpg",
"size":"133052.0",
"docPath":"/defaultDocNameSpace",
"fileID":"1157-defaultDocNameSpace",
"time":"2017-06-19 10:32:12.99"
}]
[{
"docID":"C7926E0633A0000126681FD01EA010CA",
"docName":"timg (18).jpg",
"size":"133044.0",
"docPath":"/defaultDocNameSpace",
"fileID":"1158-defaultDocNameSpace",
"time":"2017-06-19 10:33:39.046"
}]
/**
首先我们来理解下关于文档的api
文档相关api都在这2个package下面
package :com.justep.doc
Class :Docs Doc DocUtils文档相关的常用函数
package :com.justep.doc.attachment
Class: Attachments Attachment 等
其中Docs是一组Doc和合集也就是Doc的容器类 Doc对应的是文档对象DocUtils是
这里面主要是和附件相关的,我们认为Attachment是Doc作为附件形式的对象,当然这个package里面还有和附件相关的其他类 比如文档关联(AttachmentDefine)
首先 :我们要明白一个概念
文档的root-path
在x5中文档服务器可以分布式部署的,也就是说你可以连接多个x5的文档服务器来保存文件,那么你这次这个文件放到哪个文档服务上里?
在x5中是通过root-path来标识,不同的文档服务器的标识root-path是不同的(关于这块的详细理解 请参考关于文档相关的视频或者文档)
*/
/**
* 1.这里我们先看看怎么上传一个文档
* 首先我们建立个存储doc的容器
*/
{
Docs docs = new Docs();
/**
然后我们在这个容器中新建一个文档
参数:sParentId 就是说你把这个文件展现到文档中心的哪个目录下
注意:真实物理文件存储位置是在DocServer配置的data目录中
不理解文档中心目录和物理位置关系的同学 请看www.justep.com视频
*/
Doc doc = docs.addDoc("defaultDocNameSpace");
File f = new File("c:/book.xls");
/**
* 现在doc还只是文档中心树上的一个节点没有关联上任何的物理文件
* 调用upload方法,文件就传到DocServer中了 ,节点和物理文件也关联上了
*/
doc.upload(f);
/**
* 成文,也就是说你这些操作要提交了,其中该保存数据库的的保存数据库,该生成上传日志的帮我记录好日志(SA_DocLog中有记录哦)
* 不理解成文和保存的区别的看视频把
*/
docs.createVersion();
/**
* 搞定 上传完了 现在你可以看看你刚才上传的文件的fileId是多少等等 都可以通过doc.getXXX
String fileId = doc.getsFileID();
System.out.println("产生的fileId是:"+fileId);
*/
}
/**
* 2. 接下来我们看下载
*
*/
{
Docs docs = new Docs();
/**
* query(docId, docPath, pattern, orderBy, custom)
* docId 如果你只要一个文件 那么传你的docId
* docPath 说的是你要查询文档中心那颗文档树上那个节点下的文档
* pattern 你要查询那些信息 文档名字,文档大小 你就理解为sql中select部分把
* orderBy 排序 我不用解释了把
* custom 如果你还有自定意的过滤条件你就写把 你就理解为sql中wherer部分
*
* 下面我这行意思就是 我要拿/defaultDocNameSpace/0e29f353-c9d0-4bdc-8e48-647ceb9dbe62 这个节点下的所有文件 ,然后获取(get)其中docId为C581B536B8200001D99837D81ED4D2B0的doc
*
* 当然你要写成 docs.query("C581B536B8200001D99837D81ED4D2B0", "/defaultDocNameSpace/0e29f353-c9d0-4bdc-8e48-647ceb9dbe62", null, null, null)
* 那么恭喜你已经理解了哈
* 其实docs.query("C581B536B8200001D99837D81ED4D2B0", null, null, null, null)就行
*
*/
Doc doc = docs.query(null, "/defaultDocNameSpace/0e29f353-c9d0-4bdc-8e48-647ceb9dbe62", null, null, null).get("C581B536B8200001D99837D81ED4D2B0");
File outPutFile =new File("c:/"+doc.getsDocName());
doc.download(new FileOutputStream(outPutFile));
/**
* 去你C盘下看看把 是不是有个文件了
*/
}
/**
* 3. 我们来看 修改后的保存 上传 成文
*/
String docId = "C581B536B8200001D99837D81ED4D2B0";
Docs docs = new Docs().query(docId, "/defaultDocNameSpace/0e29f353-c9d0-4bdc-8e48-647ceb9dbe62", null, null, null);
Doc doc = docs.get(docId);
/**
* 上面 我不解释了
* lock 这个很重要,你要修改文件 一定要先锁上 再改哦 ,要不你保证不住多人修改文件的情况,所以我不存数据库的只修改java对象。
*/
DocUtils.lock(docId);
doc.setsDocName("b.bin");
//doc.getRow().setDateTime("sLastWriteTime",Timestamp);
doc.upload(new File("c:/boot.ini"));
/**
* 熟悉第一步的你已经懂了
* 这里 如果你addDoc的 也就是new的 就新建一个
* 如果是query的 edit的 就 修改形成文档新版本
*
* 注意 修改的情况
* 1. 修改文件内容 那么这个逻辑可以
*
* 2. 不修改文件只修改文件属性那么 需要设置
* docs.setIsEditInfo(true);
*/
docs.createVersion();
Detail
TE_UnitProjectInfo 区段桩
TE_WorkProducerInfo 工序
Model.prototype.TE_WorkSubmitAAfterNew = function(event) {
var TE_WorkSubmitA = this.comp("TE_WorkSubmitA");
biz.Request.sendBizRequest({
"context" : this.getContext(),
"action" : "getTeamResponser",
"parameters" : "",
"callback" : function(data) {
// data.ignoreError 是否忽略默认的异常处理,默认值true
data.ignoreError = false;
// data.state 请求返回状态,标识请求是否执行成功
if (data.state) {
if (data.response) {
TE_WorkSubmitA.setValue("fClassID", data.response.split(",")[0]);
TE_WorkSubmitA.setValue("fClassName", data.response.split(",")[1]);
TE_WorkSubmitA.setValue("fProjectID", fProjectID);
TE_WorkSubmitA.setValue("fProjectCode", fProjectCode);
TE_WorkSubmitA.setValue("fProjectName", fProjectName);
TE_WorkSubmitA.setValue("fUnitType", "区段");
}
}
}
});
};
/////
strNamestrID
// 类型改变时 获取项目下所有桩或者区段
Model.prototype.TE_WorkSubmitAValueChanged = function(event) {
var TE_WorkSubmitA = this.comp("TE_WorkSubmitA");
var TE_WorkSubmitDA = this.comp("TE_WorkSubmitDA");
var QData = this.comp("QData");
var cData1 = this.comp("cData1");
var cData2 = this.comp("cData2");
if (event.col == "fUnitType") {
TE_WorkSubmitA.setValue("fUnitID", "");
TE_WorkSubmitA.setValue("fUnitName", "");
var params = new biz.Request.ActionParam();
params.setString("fProjectID", TE_WorkSubmitA.getValue("fProjectID"));
params.setString("fClassID", TE_WorkSubmitA.getValue("fClassID"));
params.setString("type", event.value);
// 调用动作
var me = this;
biz.Request.sendBizRequest({
"context" : this.getContext(),
"action" : "getQuDuanOrZhuang",
"parameters" : params,
"callback" : function(data) {
// data.ignoreError 是否忽略默认的异常处理,默认值true
data.ignoreError = false;
// data.state 请求返回状态,标识请求是否执行成功
if (data.state) {
QData.deleteAllData();
var str = eval(data.response);
for (var i = 0; i < str.length; i++) {
QData.newData();
QData.setValue("strID", str[i].fID);
QData.setValue("strName", str[i].fName);
TE_WorkSubmitA.setValue("fUnitID", str[0].fID);
TE_WorkSubmitA.setValue("fUnitName", str[0].fName);
}
}
}
});
}
if (event.col == "fUnitID") {
TE_WorkSubmitA.setValue("fSubSectionID", "");
TE_WorkSubmitA.setValue("fSubSection", "");
var params = new biz.Request.ActionParam();
params.setString("currID", event.value);
params.setString("parent", "");
// 调用动作
var me = this;
biz.Request.sendBizRequest({
"context" : this.getContext(),
"action" : "getSubSection",
"parameters" : params,
"callback" : function(data) {
// data.ignoreError 是否忽略默认的异常处理,默认值true
data.ignoreError = false;
// data.state 请求返回状态,标识请求是否执行成功
if (data.state) {
cData1.deleteAllData();
var str = eval(data.response);
for (var i = 0; i < str.length; i++) {
cData1.newData();
cData1.setValue("strID", str[i].fID);
cData1.setValue("strName", str[i].fName);
TE_WorkSubmitA.setValue("fSubSectionID", str[0].fID);
TE_WorkSubmitA.setValue("fSubSection", str[0].fName);
}
}
}
});
}
if (event.col == "fSubSectionID") {
TE_WorkSubmitA.setValue("fSubItemID", "");
TE_WorkSubmitA.setValue("fSubItem", "");
var params = new biz.Request.ActionParam();
params.setString("currID", TE_WorkSubmitA.getValue("fUnitID"));
params.setString("parent", event.value);
// 调用动作
biz.Request.sendBizRequest({
"context" : this.getContext(),
"action" : "getSubSection",
"parameters" : params,
"callback" : function(data) {
// data.ignoreError 是否忽略默认的异常处理,默认值true
data.ignoreError = false;
// data.state 请求返回状态,标识请求是否执行成功
if (data.state) {
cData2.deleteAllData();
var str = eval(data.response);
for (var i = 0; i < str.length; i++) {
cData2.newData();
cData2.setValue("strID", str[i].fID);
cData2.setValue("strName", str[i].fName);
TE_WorkSubmitA.setValue("fSubItemID", str[0].fID);
TE_WorkSubmitA.setValue("fSubItem", str[0].fName);
}
}
}
});
}
if (event.col == "fSubItemID") {
// 获取工序基本设置 把工序插入从表
TE_WorkSubmitDA.refreshData();
if (TE_WorkSubmitDA.getCount() == 0) {
var params = new biz.Request.ActionParam();
params.setString("currID", TE_WorkSubmitA.getCurrentRowID());
params.setString("name", TE_WorkSubmitA.getValue("fSubItem"));
params.setString("ID", TE_WorkSubmitA.getValue("fSubItemID"));
// 调用动作
biz.Request.sendBizRequest({
"context" : this.getContext(),
"action" : "insertWorkSubmitD",
"parameters" : params,
"callback" : function(data) {
// data.ignoreError 是否忽略默认的异常处理,默认值true
data.ignoreError = false;
// data.state 请求返回状态,标识请求是否执行成功
if (data.state) {
TE_WorkSubmitDA.refreshData();
}
}
});
}
}
if (event.col == "fWorkFinishState") {
TE_WorkSubmitDA.each(function(param) {
TE_WorkSubmitDA.setValue("fWorkFinishState", event.value, param.row);
});
}
};
接受String类型赋值给变量
if(data.state){
if(data.response){
debugger;
fProjectID = data.response.split(",")[0];
fProjectCode= data.response.split(",")[1];
fProjectName =data.response.split(",")[2];
alert(fProjectName);
变量等于 赋值要用2个引号
= '"+currenttime+"'"
select m.fProjectID as fProjectID,m.fProjectCode as fProjectCode,m.fProjectName as fProjectName,case when t.fProgress is null then 0 else fProgress end as fProgress from TE_MyProjectInfo m optional join TE_ProjectInfo t on t = '8371D11AB0964B5D8392E7C89EE68580' where m.fIsDefault='是' and m.fPersonName='system'
3167DD2D4F644174A826EAFE9B96F0B0
主从表关联
//遍历JSON
if(jsonList.length>0){
for(var i = 0;i<jsonList.length;i++){
var docPath = jsonList[0]["docPath"];
var fileID = jsonList[0]["fileID"];
var docName = jsonList[0]["docName"];
var docID = jsonList[0]["docID"];
//路径
// debugger;
// var data = this.comp("Detail");
// var fPictureName = data.getValue("fPictureName");
// var jsonList = eval("("+fPictureName+")");
// var id = data.getCurrentRowID();
// var url = "";
// var name = "";
// //遍历JSON
// if(jsonList.length>0){
// for(var i = 0;i<jsonList.length;i++){
// var docPath = jsonList[0]["docPath"];
// var fileID = jsonList[0]["fileID"];
// var docName = jsonList[0]["docName"];
// var docID = jsonList[0]["docID"];
// name = docName.split(".")[0];
// url = DocUtils.InnerUtils.getdocServerAction({
// "docPath":docPath,
// urlPattern:"/repository/file/view/"+fileID+"/last/content",
// isFromAction :false,
// context: this.getContext(),
// useCookie : false
// });
// //调用API
// debugger;
// url1 = url.indexOf(window.location.protocol) < 1 ? url : window.location.protocol + "//" + window.location.host + url;
// var a= "/repository/file/view/"+fileID+"/last/content";
// data.setValue("fFile", url);
// data.setValue("fZBID",fBZID);
// data.saveData();
// data.refreshData();
// alert("已经上传了");
var data = this.comp("Detail");
var id = data.getCurrentRowID();
alert(id);
//调用动作
var params = new biz.Request.ActionParam();
params.setString("docPath",docPath);
params.setString("docId",docID);
params.setString("ID",id);
var me = this;
biz.Request.sendBizRequest({
"context" : this.getContext(),
"action" : "PictureWatermarkAction",
"parameters" : params,
"callback" : function(data) {
data.ignoreError = false;
if (data.state) {
//
}
}
});
};
/**
首先我们来理解下关于文档的api
文档相关api都在这2个package下面
package :com.justep.doc
Class :Docs Doc DocUtils
其中Docs是一组Doc和合集也就是Doc的容器类 Doc对应的是文档对象DocUtils是文档相关的常用函数
package :com.justep.doc.attachment
Class: Attachments Attachment 等
这里面主要是和附件相关的,我们认为Attachment是Doc作为附件形式的对象,当然这个package里面还有和附件相关的其他类 比如文档关联(AttachmentDefine)
首先 :我们要明白一个概念
文档的root-path
在x5中文档服务器可以分布式部署的,也就是说你可以连接多个x5的文档服务器来保存文件,那么你这次这个文件放到哪个文档服务上里?
在x5中是通过root-path来标识,不同的文档服务器的标识root-path是不同的(关于这块的详细理解 请参考关于文档相关的视频或者文档)
*/
/**
* 1.这里我们先看看怎么上传一个文档
* 首先我们建立个存储doc的容器
*/
{
Docs docs = new Docs();
/**
然后我们在这个容器中新建一个文档
参数:sParentId 就是说你把这个文件展现到文档中心的哪个目录下
注意:真实物理文件存储位置是在DocServer配置的data目录中
不理解文档中心目录和物理位置关系的同学 请看www.justep.com视频
*/
Doc doc = docs.addDoc("/defaultDocNameSpace");
File f = new File("c:/book.xls");
/**
* 现在doc还只是文档中心树上的一个节点没有关联上任何的物理文件
* 调用upload方法,文件就传到DocServer中了 ,节点和物理文件也关联上了
*/
doc.upload(f);
/**
* 成文,也就是说你这些操作要提交了,其中该保存数据库的的保存数据库,该生成上传日志的帮我记录好日志(SA_DocLog中有记录哦)
* 不理解成文和保存的区别的看视频把
*/
docs.createVersion();
/**
* 搞定 上传完了 现在你可以看看你刚才上传的文件的fileId是多少等等 都可以通过doc.getXXX
String fileId = doc.getsFileID();
System.out.println("产生的fileId是:"+fileId);
*/
}
/**
* 2. 接下来我们看下载
*
*/
{
Docs docs = new Docs();
/**
* query(docId, docPath, pattern, orderBy, custom)
* docId 如果你只要一个文件 那么传你的docId
* docPath 说的是你要查询文档中心那颗文档树上那个节点下的文档
* pattern 你要查询那些信息 文档名字,文档大小 你就理解为sql中select部分把
* orderBy 排序 我不用解释了把
* custom 如果你还有自定意的过滤条件你就写把 你就理解为sql中wherer部分
*
* 下面我这行意思就是 我要拿/defaultDocNameSpace/0e29f353-c9d0-4bdc-8e48-647ceb9dbe62 这个节点下的所有文件 ,然后获取(get)其中docId为C581B536B8200001D99837D81ED4D2B0的doc
*
* 当然你要写成 docs.query("C581B536B8200001D99837D81ED4D2B0", "/defaultDocNameSpace/0e29f353-c9d0-4bdc-8e48-647ceb9dbe62", null, null, null)
* 那么恭喜你已经理解了哈
* 其实docs.query("C581B536B8200001D99837D81ED4D2B0", null, null, null, null)就行
*
*/
Doc doc = docs.query(null, "/e48-647ceb9dbe62", null, null, null).get("C581B536B8200001D99837D81ED4D2B0");
File outPutFile =new File("c:/"+doc.getsDocName());
doc.download(new FileOutputStream(outPutFile));
/**
* 去你C盘下看看把 是不是有个文件了
*/
}
/**
* 3. 我们来看 修改后的保存 上传 成文
*/
String docId = "C581B536B8200001D99837D81ED4D2B0";
Docs docs = new Docs().query(docId, "/defe62", null, null, null);
Doc doc = docs.get(docId);
/**
* 上面 我不解释了
* lock 这个很重要,你要修改文件 一定要先锁上 再改哦 ,要不你保证不住多人修改文件的情况,所以我不存数据库的只修改java对象。
*/
DocUtils.lock(docId);
doc.setsDocName("b.bin");
//doc.getRow().setDateTime("sLastWriteTime",Timestamp);
doc.upload(new File("c:/boot.ini"));
/**
* 熟悉第一步的你已经懂了
* 这里 如果你addDoc的 也就是new的 就新建一个
* 如果是query的 edit的 就 修改形成文档新版本
*
* 注意 修改的情况
* 1. 修改文件内容 那么这个逻辑可以
*
* 2. 不修改文件只修改文件属性那么 需要设置
* docs.setIsEditInfo(true);
*/
docs.createVersion();
以上代码 主要用来介绍api 里面有写地方需要理解代码后自己注意,千万不要照抄
比如docs.get(docId); 你应该考虑 docId不再docs里面后返回的doc是null的情况
lock的时候 已经有别人锁上了 根据返回值来判断是否已经锁上的情况。
如果要在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
[
{
"storeFileName":"C79039E3C480000149701590D87C1B74",
"realFileName":"u=397047316,2841163867&fm=26&gp=0.jpg",
"ownerID":"1"}
]
fileID = doc.getsFileID();
docID = doc.getsID();
docName = doc.getsDocName();
docPath = doc.getsDocPath();
size = doc.getsSize().toString();
docValue = "[{\"docID\":\"" + docID + "\",
\"docName\":\"" + docName + "\",
\"size\":\"" + size + "\",
\"fileID\":\"" + fileID+ "\",
\"docPath\":\"" + docPath + "\",
\"time\":\"" + new java.sql.Timestamp((new java.util.Date()).getTime())
+ "\"}]";
while (iterator.hasNext()){
// String key = iterator.next();
// if (key.equals("carinfo")){
// JSONArray jsonArray = jsonObject1.getJSONArray(key);
// List<Hashtable< String, Object>> carinfo = new ArrayList<>();
// for (int i =0 ; i< jsonArray.length() ;i++){
// Hashtable<String, Object> info = new Hashtable<>();
// JSONObject jsonObject2 = jsonArray.getJSONObject(i);
// Iterator< String> iterator1 = jsonObject2.keys();
//下载
- 20170623
- 20170623
- 20170623
- 20170623
- 20170619--20170623
- 20170623总结
- SpringBoot使用记录-20170623更新
- android developer tiny share-20170623
- laravel学习笔记及记录 20170623
- 20170623:七周七数据分析,Excel篇
- CSDN日报20170623——《一个文科生的工程师之路》
- mysql数据库优化--(3)设计 范式 Normal Format, 规范的格式
- 56-Merge Intervals && 57-Insert Interval
- 写给非专业人士看的 Shadowsocks 简介
- PAT练习-程序运行时间
- 61-Rotate List
- 20170623
- 三元式,四元式,逆波兰表达式
- 62-Unique Paths
- CDN 是个啥
- 关于PCA算法学习心得
- 在windows电脑上配置自动打包
- 如何下载百度地图中的矢量POI兴趣点
- JQuery2------6.22
- 63-Unique Paths II