JodConvert3.0 线程化转换 office系列(一)

Stella981
• 阅读 281

在最近的项目中遇到问题,用户要上传office系列文档到项目中,然后我们要进行预览,那么问题来了,现在的word之类的是不支持预览的,2007以后的版本还行,03就是完全不行的。于是我去网上找资料,大谷歌是无敌的,大中国是要翻墙的......### ####搜到了一些相关资料#### jodconvert openoffice swftools ####还有一些我用到的东西#### RMI 其他的东西不方便透露

###基本的思路是这样、我们由用户从servlet上传文件,接着开始对文件进行处理、上传,然后将上传的文件进行转换,最后上传至云端,接着就开始码代码的极端了###

###首先我们要准备好几个类:上传文件处理类、文档转换类(office to pdf)、pdf信息类、文档转换类2(pdf to swf)、数据库类等等###

首先进行文件上传

public String uploadFile() {
                //这里封装了 json
        if(userId.equals("")){
            return JsonReturn(false, null, "用户没有登录");
        }
        ArrayList<FileUpdateInfo> files=new ArrayList<FileUpdateInfo>();
        //JSONObject.
        if(list.size()<1){
            return JsonReturn(false, files, "没有文件上传");
        }
        try{
            for(FileItem item : list)
            {
                //获取表单的属性名字
                String name = item.getFieldName();
                
                //对传入的非 简单的字符串进行处理 ,比如说二进制的 图片,电影这些
                if(!item.isFormField())
                {
                    //获取路径名
                    String value = item.getName() ;
                    //索引到最后一个反斜杠
                    int start = value.lastIndexOf("\\");
                    String filename = value.substring(start+1);
                    if(filename.equals("")){ 
                        FileUpdateInfo fileInfo=new FileUpdateInfo(filename, item.getSize(),"",false,"", "", name);
                        fileInfo.setErrorMsg(2);
                        files.add(fileInfo);
                        continue;
                    }
                    String filePath=path+"/"+filename;
                    String fileExt="";
                    String fileSuffix=filename.substring(filename.lastIndexOf('.'));
                    if(!fileSuffix.contains(fileSuffix)){
                        FileUpdateInfo fileInfo=new FileUpdateInfo(filename, item.getSize(),fileExt,false,fileSuffix, filePath, name);
                        files.add(fileInfo);
                        fileInfo.setErrorMsg(4);
                        continue;
                    }
                    //手动写的
                    OutputStream out = new FileOutputStream(new File(path,filename));
                    InputStream in = item.getInputStream() ;
                    int length = 0 ;
                    byte [] buf = new byte[1024] ;
                    length = in.read(buf);
                    fileExt=FileExtUtil.getExt(buf);
                    out.write(buf, 0, length); 
    
                    while( (length = in.read(buf) ) != -1)
                    {            //在   buf 数组中 取出数据 写到 (输出流)磁盘上
                        out.write(buf, 0, length);    
                    }
                    filePath=filePath.replaceAll("\\\\","/");
                    FileUpdateInfo fileInfo=new FileUpdateInfo(filename, item.getSize(),fileExt,filename.substring(filename.lastIndexOf('.')), filePath, name);
                    files.add(fileInfo);
                    int fileId=insertDocument(fileInfo,userId);
                    FileInfo info=new FileInfo(userId, filePath,fileId);
                    //RMI写入本地转换进程
                    InsertFileList(info);
                    in.close();
                    out.close();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return JsonReturn(true, files, "结束");
    }

###上传完文件之后,我们将临时数据插入到数据库###

FileUpdateInfo fileInfo=new FileUpdateInfo(filename, item.getSize(),fileExt,filename.substring(filename.lastIndexOf('.')), filePath, name);
                    files.add(fileInfo);
                    int fileId=insertDocument(fileInfo,userId);

###上面我们返回了文件ID。接着我们使用了RMI进行了远程访问,当然,我这里是进行本地访问,将上传的文件加入到了队列里头###

    String rmiUrl="rmi://127.0.0.1:13355/FileAdd";
            ConvertList list=(ConvertList)Naming.lookup(rmiUrl);
            list.addQuery(fileInfo);

好了 这样我们的servlet端就已经处理完了。 下面我们来写文件转换的后台服务!

点赞
收藏
评论区
推荐文章
九路 九路
3年前
iOS 图片和文字一起上传
最近在忙着开发公司的一个项目,中间遇到很多坑,对于图片的上传在这里我也不做太多的介绍,网上各种大神的资料都有的,今天我主要说一下我再上传图片和文字的时候遇到的一些坑(图文上传我们很多时候都会遇到,遇到多了网上找的各种博客,解决了图文一起上传的问题)废话不多说,直接上代码:/上传图文/(void)upLoadImageViewToS
Wesley13 Wesley13
2年前
java调用PageOffice生成word
一、在开发OA办公或与文档相关的Web系统中,难免会遇到动态生成word文档的需求,为了解决工作中遇到导出word文档的需求,前一段时间上网找了一些资料,在word导出这方面有很多工具可以使用,jacob、poi、java2word、itext。jacob要求服务器必须是windows操作系统,服务器上还必须安装office软件,果断放弃!poi需要针对do
Easter79 Easter79
2年前
springboot项目文件上传(绝对路径)并使用tomcat虚拟路径进行图片预览
前言项目中,需要上传文件,但是可能会比较多,所以不能放入项目目录中,需要指定目录并按顺序放置。并且:还需要这些数据可以预览(图片等)。那么问题就是:上传完成之后我存入服务器,并拿到绝对路径,存入数据库,那么,前台访问的时候请求地址肯定是:ip端口项目名,那么该如何获取资源呢?正文:1\.文件上传到指定目录(服务
Stella981 Stella981
2年前
Shiro预览
Shiro预览差不多半年之前就看到很多人在群里面讨论Shiro,由于各种原因,一直没有关注它。最近比较空闲,于是把官方的文档过一遍。所以本系列文章是根据我个人了解学习Shiro过程的笔记,可能文字上面比较粗略,望大家谅解。做一件事,我一般遵循三个步骤:What,How,When。那么要首先需要知道Shiro是什么,以及如何使用,什么场
Wesley13 Wesley13
2年前
JAVA + js 实现 头像上传及裁剪功能
我想大家对头像上传功能在陌生不过了把,每个人都应该用过,当然,从不更改头像的大侠除外,写到这里,我突然想到我的CSDN用户也没有头像,于是,我到设置里面准备去看看CSDN的头像上传功能是怎样的,可是我弄了半天都没搞定,提示说高版本浏览器不支持预览,难道只有IE6才支持?难得吐槽一下,不知道是我人品问题还是没用对。如图:!(http://static.
Stella981 Stella981
2年前
Linux 打包QT程序到未安装QT的其他Linux主机下运行
昨天终于改好了一个开源但是用起来有问题的串口调试助手,想把它打包一下以后在其他电脑上也可以用。找了网上的一个教程打包后,在本机上可以正常使用,但是移植到另一台上就出现缺少xcb的提示。上网搜资料倒腾了一番后,发现libqxcb.so链接文件出了一些问题,问题有点大,也意识到这一部分依赖的配置是有问题的。于是重新搜索QT在Linux下的打包流程,
Stella981 Stella981
2年前
Jmagic与 ImageMagick linux下安装与使用
  公司现在用的是java开发,后台难免会用到图片上传,自动生成缩略图,然后不可避免的要安装一些比较好的软件,我们公司使用的是ImageMagick,一个图片处理程序,就是说我们可以通过程序来进行图片的处理,格式化转换,加水印,生成缩略图等。但是!这只是一个软件,当我们安装完这个软件的时候我们只能通过命令来进行图片转换   比如convert
Wesley13 Wesley13
2年前
MySQL5.5 数据库主从复制
        今天参照网上的资料进行mysql数据库的主从复制研究,本来网上的资料已经很详细,但是我在实践中还是遇到了很多问题,下面就根据网上的资料以及我遇到的问题进行一个总结。      系统环境:Ubuntu12.04      软件版本:mysqlserver5.5      主机IP:192.168.0.200   
京东云开发者 京东云开发者
4个月前
源码补丁神器—patch-package
一、背景vue项目中使用第三方插件预览pdf,书写业务代码完美运行,pdf文件内容正常预览无问题。后期需求有变,业务需求增加电子签章功能。这个时候pdf文件的内容可以显示出来,但是公司的电子签章无法显示。这令人沮丧,因为已经编写了许多特定于此依赖项的代码,
京东云开发者 京东云开发者
1个月前
大文件上传实践分享
一、方案背景:在此前的项目中有个需求是用户需要通过前端页面上传大约1.5G的压缩包,存储到OSS,后提供给其他用户下载。于是我开始了大文件上传方案的探索。本文主要探究的是前端技术实现,后端给予相应的支持。二、原理探索之路2.1大文件上传想要实现的目标在此项