zoukankan      html  css  js  c++  java
  • 根据传入的文件名称动态从moglifs图片服务器拿到pdf文档并在线浏览

    1.通过百度编辑器上传pdf文档等附件时,在上传方法中将返回的url进行设定,以达到后期点击后可进行浏览的效果:

    public static final State save(HttpServletRequest request,
                Map<String, Object> conf) {
            FileItemStream fileStream = null;
            boolean isAjaxUpload = request.getHeader( "X_Requested_With" ) != null;
    
            if (!ServletFileUpload.isMultipartContent(request)) {
                return new BaseState(false, AppInfo.NOT_MULTIPART_CONTENT);
            }
    
            ServletFileUpload upload = new ServletFileUpload(
                    new DiskFileItemFactory());
    
            if ( isAjaxUpload ) {
                upload.setHeaderEncoding( "UTF-8" );
            }
    
            try {
                FileItemIterator iterator = upload.getItemIterator(request);
                
                
                while (iterator.hasNext()) {
                    fileStream = iterator.next();
    
                    if (!fileStream.isFormField())
                        break;
                    fileStream = null;
                }
    
                if (fileStream == null) {
                    return new BaseState(false, AppInfo.NOTFOUND_UPLOAD_DATA);
                }
    
                String savePath = (String) conf.get("savePath");
                String originFileName = fileStream.getName();
                String suffix = FileType.getSuffixByFilename(originFileName);
                //将名字重复名,以免重复导致图片被覆盖并且防由于特殊字符导致无法上传
                originFileName = DateFormatHelper.getNowTimeStr("yyyyMMddHHmmssSSS")+CodeManager.getRandomNum(10);//originFileName.substring(0,originFileName.length() - suffix.length());
                savePath = savePath + suffix;
    
                long maxSize = ((Long) conf.get("maxSize")).longValue();
    
                if (!validType(suffix, (String[]) conf.get("allowFiles"))) {
                    return new BaseState(false, AppInfo.NOT_ALLOW_FILE_TYPE);
                }
    
                savePath = PathFormat.parse(savePath, originFileName);
    
                String physicalPath = (String) conf.get("rootPath") + savePath;
    
                InputStream is = fileStream.openStream();
                
                FileModel filemodel=uploadFiles(is, originFileName + suffix);
                System.out.println(filemodel.toString());
                
                State storageState = new BaseState(true);
                String temp=filemodel.getRemotePaths();
                String temp2=temp.substring(getCharacterPosition(temp), temp.length());
                System.out.println(temp2);
                storageState.putInfo( "title", filemodel.getFileName());
                
                if (storageState.isSuccess()) {
                    //storageState.putInfo("url", temp2);//PathFormat.format(savePath)
                    storageState.putInfo("url", getDownloadPath(suffix, originFileName + suffix, temp2));
                    storageState.putInfo("type", suffix);
                    storageState.putInfo("original", originFileName + suffix);
                }
    
                return storageState;
            } catch (FileUploadException e) {
                log.error("FileUploadException",e);
                return new BaseState(false, AppInfo.PARSE_REQUEST_ERROR);
            } catch (IOException e) {
                log.error("IOException",e);
            }
            return new BaseState(false, AppInfo.IO_ERROR);
        }

    设定返回url方法:

    /**
         * 返回可在线浏览pdf的url
         * @param suffix
         * @param fileName
         * @param imgUrl
         * @return
         */
        private static String getDownloadPath(String suffix,String fileName,String imgUrl){
            String[] downFileSuffix = new String[]{".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml",".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso"};
            List<String> list = Arrays.asList(downFileSuffix);
            String returnUrl = imgUrl;
            if(list.contains(suffix)){
                returnUrl = "/browsePdf?enclosure="+fileName;
            }
            return returnUrl;
        }

    2.下边为在线浏览的控制层方法:

    /**
         * 在线浏览pdf
         * @param request
         * @param response
         * hdf
         * @throws Exception
         */
        @RequestMapping(value = "/browsePdf", method = RequestMethod.GET)
        public void browsePdf(HttpServletRequest request,
                             HttpServletResponse response) throws Exception {
            String enclosure = request.getParameter("enclosure");
            // 在线浏览pdf
            fileUpload.browsePdf(request, response, enclosure);
        }

    通过文件名获取流,将流以pdf的格式输出,注意:1.格式必须设置为pdf,2,需要将浏览的类型设置为:inline

    /**
         * 通过web应用来l浏览pdf文档
         * @param request HttpServletRequest对象
         * @param response HttpServletResponse对象
         * @param fileName 真实的文件名字,也就是记录在File模块里面的名字
         *  Add by hdf when 2017.10.10
         */
        public void browsePdf(HttpServletRequest request,
                                 HttpServletResponse response, String fileName){
            BufferedInputStream bis = null;
            BufferedOutputStream bos = null;
            try{
                //设置字符集
                //response.setContentType("charset=UTF-8");
                response.setContentType("application/pdf");
                response.setCharacterEncoding("UTF-8");
                request.setCharacterEncoding("UTF-8");
    
                //根据文件名字在file记录里面获取相应的记录
                //FileModel fm = fileup.getOneFileModel(fileName);
                FileModel fm = fileService.getOneFileModel(fileName);
                String mogilefsPath = fm.getRemotePaths();
                //设置文件下载中,对话框显示的文件名字,也就是真实名字
                response.setHeader("Content-disposition", "inline; filename="
                        + new String(fm.getFileName().getBytes("gb2312"), "ISO8859-1"));
    
                //通过URL从Mogilefs去获取文件内容
                URL url = new URL(mogilefsPath);
    
    
                bis = new BufferedInputStream(url.openStream());
                bos = new BufferedOutputStream(response.getOutputStream());
                byte[] buff = new byte[1024];
                int bytesRead = 0;
                //判断是否需要编码转换
                int lastPointSite = fm.getFileName().lastIndexOf(".");
                String fileType = fm.getFileName().substring(lastPointSite);
                boolean needTrans = this.needTransCharacterEncoding.contains(fileType);
                //流式获取内容并流式输出
                while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
                    if(needTrans){
                        String tempS = new String(buff,"utf-8");
                        bos.write(tempS.getBytes());
                        buff = new byte[1024];
                    }else{
                        bos.write(buff, 0, bytesRead);
                    }
                }
                if(bos !=null){
                    bos.close();
                }
            }catch(Exception err){
                log.error(err);
    //            err.printStackTrace();
                throw new LogException("file.downLoad", "downloadFile error,fileName="+fileName, err);
            }finally{
                try{
                    if(bis !=null){
                        bis.close();
                    }
                }catch(Exception err){
                    log.error(err);
    //                err.printStackTrace();
                }
                try{
                    if(bos !=null){
                        bos.close();
                    }
                }catch(Exception err){
                    log.error(err);
    //                err.printStackTrace();
                }
            }
        }
  • 相关阅读:
    Docker的ubuntu镜像安装的容器无ifconfig和ping命令的解决
    高德地图api实现地址和经纬度的转换(python)
    数据结构:优先队列 基于堆实现(python版)
    数据结构:优先队列 基于list实现(python版)
    数据结构:堆排序 (python版) 小顶堆实现从大到小排序 | 大顶堆实现从小到大排序
    数据结构:基于list实现二元表达式(python版)
    数据结构:二叉树 基于list实现(python版)
    python之数据库内置方法以及pymysql的使用
    Python之内置函数一
    mysql数据库的安装和基本使用
  • 原文地址:https://www.cnblogs.com/hedongfei/p/7652654.html
Copyright © 2011-2022 走看看