domino获取文件流并生成新的附件文档

16 篇文章 1 订阅

这个代码我用LS调用成功了,但是没有进行联调,所以可能还存在其他的问题。话不多说,先上代码。

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Vector;

import lotus.domino.*;
import lotus.domino.types.*;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;


public class EleSealToOAnew{

  // This is a template implementation class for your web service. It
  // becomes extraneous if you import a WSDL document. Consumers of this
  // web service can call any public method in the implementation class.
  // 
  // To obtain a Session object use this code:
  // Session s = WebServiceBase.getCurrentSession();
	//参数解析:
	//1、加密后的文本内容
	//2、业务文档唯一标识符
	//3、附件名称
	
	//如果上传成功。返回200,成功返回201和报错
	public String ReceiveFile(String FileDetail,String unid,String attachname){
		
		System.out.println("---开始执行生成pdf文件代码----");
		//先判断文本内容是否为空,为空则返回false
		String returnstr = "";
		
		if(FileDetail == null){
			System.out.println("用印审批模块获取盖章附件接口错误:文本内容为空");
			returnstr = "{\"code\":\"201\",\"msg\":\"用印审批模块获取盖章附件接口错误:文本内容为空\"}";
			return returnstr;
		}
		if(unid == null || unid.equals("")){
			System.out.println("用印审批模块获取盖章附件接口错误:文件标识符为空");
			returnstr = "{\"code\":\"201\",\"msg\":\"用印审批模块获取盖章附件接口错误:文件标识符为空\"}";
			return returnstr;
		}
		
		if(attachname == null || attachname.equals("")){
			System.out.println("用印审批模块获取盖章附件接口错误:附件名称为空");
			returnstr = "{\"code\":\"201\",\"msg\":\"用印审批模块获取盖章附件接口错误:附件名称为空\"}";
			return returnstr;
		}
		
		//定义参数
		Session session = null;
		
		//当前数据库参数
		Database db = null;
		Document doc = null;
		
		//附件数据库参数
		Database attadb = null;
		View attaview = null;
		Document attadoc = null;
		RichTextItem attartf = null;
		String outFilePath = null;
				
		try {
			session = WebServiceBase.getCurrentSession();
			
			//获取当前数据库
			db = session.getCurrentDatabase();
			
			if(db!=null){
				//根据unid获取业务文档
				//获取对应的业务文档
				doc = db.getDocumentByUNID(unid);
				
				if(doc!=null)
				{
					//获取附件数据库
					attadb = session.getDatabase(session.getServerName(), "attach/"+doc.getItemValueString("attachDb"));
					System.out.println("1、执行到这里啦-------------");
					if(attadb!=null)
					{
						attaview = attadb.getView("vws_AttachByUNIDandName");
						System.out.println("2、执行到这里啦-------------");
						
						//获取对应的附件文档
						 Vector keys = new Vector();
						 keys.addElement(unid);
						 keys.addElement(attachname);
						 
						attadoc = attaview.getDocumentByKey(keys, true);
						
						if(attadoc!=null)
						{
							System.out.println("------附件文档已存在------");
							
							//如果存在,则替换附件
							outFilePath = "/home/notesdata/temp/"+attachname;
							
							if(CreateFile(FileDetail,outFilePath))
							{	
								//如果有该字段,则将该字段删除,重新创建一次
								if(attadoc.hasItem("fld_Body"))
								{
									attartf = (RichTextItem) attadoc.getFirstItem("fld_Body");
									attartf.remove();
								}
								System.out.println("3、执行到这里啦-------------");
								attartf = attadoc.createRichTextItem("fld_Body");
								attartf.embedObject(EmbeddedObject.EMBED_ATTACHMENT, null, outFilePath, null);
								
								attadoc.save(true,false);
								
								//删除文件夹附件
								File file = new File(outFilePath);
								file.delete();
								System.out.println("附件已成功上传");
								
								//修改业务文档的附件字段
								String temname = doc.getItemValueString("Tattament")+","+attachname;
								doc.replaceItemValue("Tattament", temname);
								doc.save(true,false);
								
								returnstr = "{\"code\":\"200\",\"msg\":\"附件已成功上传\"}";
							}
						}else{
							
							System.out.println("------附件?牡挡淮嬖?-----");
							
							outFilePath = "/home/notesdata/temp/"+attachname;
							if(CreateFile(FileDetail, outFilePath))
							{
								//创建附件文档
								attadoc = attadb.createDocument();
								
								attartf = attadoc.createRichTextItem("fld_Body");
								attartf.embedObject(EmbeddedObject.EMBED_ATTACHMENT, null, outFilePath, null);
								attadoc.appendItemValue("fld_ID", attadoc.getUniversalID());
								attadoc.appendItemValue("fld_CurLocker", "");
								attadoc.appendItemValue("fld_CurLockUser", "");
								attadoc.appendItemValue("fld_Editor", "");
								attadoc.appendItemValue("fld_IsCanEdit", "1");
								attadoc.appendItemValue("fld_IsEdited", "0");
								attadoc.appendItemValue("fld_IsQG", "0");
								attadoc.appendItemValue("fld_isRemove", "1");
								attadoc.appendItemValue("fld_Name", attachname);
								attadoc.appendItemValue("fld_ParentID", unid);
								//创建时间
								SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
								attadoc.appendItemValue("fld_Time", df.format(new Date()).toString());
								
								attadoc.appendItemValue("fld_type", "1");
								attadoc.appendItemValue("fld_UrlMainID", "1");
								attadoc.appendItemValue("fld_UserName", doc.getItemValueString("Sauthor"));
								attadoc.appendItemValue("FORM", "frm_Attach");
								attadoc.save(true,false);
								
								//删除文件夹附件
								File file = new File(outFilePath);
								file.delete();
								System.out.println("附件已成功上传,创建附件文档完成");
								
								//修改业务文档的附件字段
								String temname = doc.getItemValueString("Tattament")+","+attachname;
								doc.replaceItemValue("Tattament", attachname);
								doc.save(true,false);
								
								returnstr = "{\"code\":\"200\",\"msg\":\"附件已成功上传,创建附件文档完成\"}";
							}
						}
					}else{
						System.out.println("用印审批模块获取盖章附件接口错误:无法找到对应的附件数据库");
						returnstr = "{\"code\":\"201\",\"msg\":\"用印审批模块获取盖章附件接口错误:无法找到对应的附件数据库\"}";
					}
				}else{
					System.out.println("用印审批模块获取盖章附件接口错误:无法找到对应的业务文档");
					returnstr = "{\"code\":\"201\",\"msg\":\"用印审批模块获取盖章附件接口错误:无法找到对应的业务文档\"}";
				}
			}else{
				System.out.println("用印审批模块获取盖章附件接口错误:无法找到对应数据库");
				returnstr = "{\"code\":\"201\",\"msg\":\"用印审批模块获取盖章附件接口错误:无法找到对应数据库\"}";
			}
			
		} catch (Exception e) {
			// TODO: handle exception
			System.out.println("用印审批模块获取盖章附件接口错误:");
			e.printStackTrace();
			returnstr = "{\"code\":\"201\",\"msg\":\"用印审批模块获取盖章附件接口错误\"}";
			
		}finally{
			//释放资源
			try {
				if(session!=null)
				{
					session.recycle();
				}
				if(db!=null)
				{
					db.recycle();
				}
				if(doc!=null)
				{
					doc.recycle();
				}
				if(attadb!=null)
				{
					attadb.recycle();
				}
				if(attaview!=null)
				{
					attaview.recycle();
				}
				if(attadoc!=null)
				{
					attadoc.recycle();
				}
				if(attartf!=null)
				{
					attartf.recycle();
				}
				
			}catch (Exception e2) {
					// TODO: handle exception
					System.out.println("用印审批模块获取盖章附件接口释放资源错误:");
					e2.printStackTrace();
					returnstr = "{\"code\":\"201\",\"msg\":\"用印审批模块获取盖章附件接口释放资源错误\"}";
			}
		}
		System.out.println("---结束执行生成pdf文件代码----");
		return returnstr;
	}
	
	
	//根据加密流文件生成文件并存放在相关位置
	
	public boolean CreateFile(String FileDetail,String outFilePath)
	{
		boolean flag = false;
		
		//定义解密对象
		BASE64Decoder decoder = new BASE64Decoder();
		
		File file = null;
		FileOutputStream fos = null;
		
		try {
			System.out.println("创建附件文件开始-----------");
			
			//创建输出流
			System.out.println(outFilePath);
			file = new File(outFilePath);
			if(file.isDirectory()){
				System.out.println("CreateFile函数错误:该路径为文件夹,不能创建文件");
				return false;
			}
			fos = new FileOutputStream(file);
			
			//解密文本内容
			byte[] b = decoder.decodeBuffer(FileDetail);
			for(int i = 0;i<b.length;++i){
				if(b[i]<0)
				{
					//调整异常数据
					b[i]+=256;
				}
			}
			
			fos.write(b);
			fos.flush();
			
			flag = true;
			
			System.out.println("创建附件文件结束-----------");
			
		} catch (Exception e) {
			// TODO: handle exception
			System.out.println("CreateFile函数错误");
			e.printStackTrace();
		}finally{
			//释放资源
			if(fos!=null){
				try {
					fos.close();
				} catch (Exception e2) {
					// TODO: handle exception
					System.out.println("CreateFile函数释放文件流错误");
					e2.printStackTrace();
				}
			}
		}
		
		return flag;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值