java上传在线浏览文档、PDF文档等
java实现文件的上传
java实现文件的上传1、文件上传的核心点1:用<input type=”file”/> 来声明一个文件域。
File:_____ <浏览>.2:必须要使用post方式的表单。
3:必须设置表单的类型为multipart/form-data.是设置这个表单传递的不是key=value值。
传递的是字节码.对于一个普通的表单来说只要它是post类型。
默认就是Content-type:application/x-www-from-urlencoded表现形式1:在request的请求头中出现。
2:在form声明时设置一个类型enctype="application/x-www-form-urlencoded";如果要实现文件上传,必须设置enctype=“multipart/form-data”表单与请求的对应关系:2、如何获取上传的文件的内容-以下是自己手工解析txt文档package cn.itcast.servlet;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/*** 如果一个表单的类型是post且enctype为multipart/form-date* 则所有数据都是以二进制的方式向服务器上传递。
java传输文件 方案
Java传输文件方案1. 简介在开发Java应用程序时,经常需要通过网络传输文件。
本文将介绍几种常见的Java传输文件的方案,包括使用原生Java API实现文件传输、使用FTP协议传输文件以及使用HTTP协议传输文件。
2. 使用原生Java API实现文件传输Java提供了一系列的API来处理文件传输操作。
下面将介绍如何使用原生Java API实现文件传输。
2.1 文件上传在Java中,可以使用java.io包提供的类来实现文件上传。
以下是一个简单的文件上传示例:import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.OutputStream;import .Socket;public class FileUploader {public static void uploadFile(File file, String host, int port) thr ows IOException {try (Socket socket = new Socket(host, port);FileInputStream fileInputStream = new FileInputStream(fil e);OutputStream outputStream = socket.getOutputStream()) { byte[] buffer = new byte[4096];int bytesRead;while ((bytesRead = fileInputStream.read(buffer)) != -1) {outputStream.write(buffer, 0, bytesRead);}}}}在上述示例中,我们使用Socket类实现了与服务器建立连接,并使用FileInputStream读取文件内容,并通过OutputStream将文件内容写入到服务器。
Java文件上传与文件下载实现方法详解
Java⽂件上传与⽂件下载实现⽅法详解本⽂实例讲述了Java⽂件上传与⽂件下载实现⽅法。
分享给⼤家供⼤家参考,具体如下:Java⽂件上传数据上传是客户端向服务器端上传数据,客户端向服务器发送的所有请求都属于数据上传。
⽂件上传是数据上传的⼀种特例,指客户端向服务器上传⽂件。
即将保存在客户端的⽂件上传⼀个副本到服务器,并保存在服务器中。
1、上传表单要求⽂件上传要求客户端提交特殊的请求——multipart请求,即包含多部分数据的请求。
必须将<form/>标签的enctype属性值设为“multipart/form-data”,enctype表⽰encodingType,及编码类型由于客户端上传⽂件的⼤⼩是不确定的,所以http协议规定,⽂件上传的数据要存放于请求正⽂中,不能出现在URL地址栏内。
也就是说,想要上传⽂件必须提交POST请求。
表单中要有<input type="file" />标签注意:multipart/form-data请求与普通请求不同2、下载⽂件上传jar包并查看官⽅⽂档选择Commons中的FileUpload项⽬,并下载jar包和源⽂件查看FileUpload的⼯作⽅式查看FileUpload项⽬的API3、使⽤第三⽅jar包上传⽂件public class RegisterServlet extends HttpServlet {private static final long serialVersionUID = 1L;public RegisterServlet() {super();}protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.getWriter().append("Served at: ").append(request.getContextPath());}protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//第⼀步、判断请求是否为multipart请求if(!ServletFileUpload.isMultipartContent(request)) {throw new RuntimeException("当前请求只⽀持⽂件上传");}try {//第⼆步、创建FileItem⼯⼚DiskFileItemFactory factory = new DiskFileItemFactory();//设置临时⽂件存储⽬录String path = this.getServletContext().getRealPath("/Temp");File temp = new File(path);factory.setRepository(temp);//单位:字节。
Java实现办公文档在线预览功能
Java实现办公⽂档在线预览功能java实现办公⽂件在线预览功能是⼀个⼤家在⼯作中也许会遇到的需求,⽹上些公司专门提供这样的服务,不过需要收费如果想要免费的,可以⽤openoffice,实现原理就是:通过第三⽅⼯具openoffice,将word、excel、ppt、txt等⽂件转换为pdf⽂件流;当然如果装了Adobe Reader XI,那把pdf直接拖到浏览器页⾯就可以直接打开预览,前提就是浏览器⽀持pdf⽂件浏览。
我这⾥介绍通过poi实现word、excel、ppt转pdf流,这样就可以在浏览器上实现预览了。
1.到官⽹下载安装包,安装运⾏。
(不同系统的安装⽅法,⾃⾏百度,这⾥不做过多说明)2.再项⽬的pom⽂件中引⼊依赖<!--openoffice--><dependency><groupId>com.artofsolving</groupId><artifactId>jodconverter</artifactId><version>2.2.1</version></dependency>3.将word、excel、ppt转换为pdf流的⼯具类代码import com.artofsolving.jodconverter.DefaultDocumentFormatRegistry;import com.artofsolving.jodconverter.DocumentConverter;import com.artofsolving.jodconverter.DocumentFormat;import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;import com.artofsolving.jodconverter.openoffice.converter.StreamOpenOfficeDocumentConverter;import java.io.*;import .HttpURLConnection;import .URL;import .URLConnection;/*** ⽂件格式转换⼯具类** @author tarzan* @version 1.0* @since JDK1.8*/public class FileConvertUtil {/** 默认转换后⽂件后缀 */private static final String DEFAULT_SUFFIX = "pdf";/** openoffice_port */private static final Integer OPENOFFICE_PORT = 8100;/*** ⽅法描述 office⽂档转换为PDF(处理本地⽂件)** @param sourcePath 源⽂件路径* @param suffix 源⽂件后缀* @return InputStream 转换后⽂件输⼊流* @author tarzan*/public static InputStream convertLocaleFile(String sourcePath, String suffix) throws Exception {File inputFile = new File(sourcePath);InputStream inputStream = new FileInputStream(inputFile);return covertCommonByStream(inputStream, suffix);}/*** ⽅法描述 office⽂档转换为PDF(处理⽹络⽂件)** @param netFileUrl ⽹络⽂件路径* @param suffix ⽂件后缀* @return InputStream 转换后⽂件输⼊流* @author tarzan*/public static InputStream convertNetFile(String netFileUrl, String suffix) throws Exception {// 创建URLURL url = new URL(netFileUrl);// 试图连接并取得返回状态码URLConnection urlconn = url.openConnection();urlconn.connect();HttpURLConnection httpconn = (HttpURLConnection) urlconn;int httpResult = httpconn.getResponseCode();if (httpResult == HttpURLConnection.HTTP_OK) {InputStream inputStream = urlconn.getInputStream();return covertCommonByStream(inputStream, suffix);}return null;}/*** ⽅法描述将⽂件以流的形式转换** @param inputStream 源⽂件输⼊流* @param suffix 源⽂件后缀* @return InputStream 转换后⽂件输⼊流* @author tarzan*/public static InputStream covertCommonByStream(InputStream inputStream, String suffix) throws Exception {ByteArrayOutputStream out = new ByteArrayOutputStream();OpenOfficeConnection connection = new SocketOpenOfficeConnection(OPENOFFICE_PORT);connection.connect();DocumentConverter converter = new StreamOpenOfficeDocumentConverter(connection);DefaultDocumentFormatRegistry formatReg = new DefaultDocumentFormatRegistry();DocumentFormat targetFormat = formatReg.getFormatByFileExtension(DEFAULT_SUFFIX);DocumentFormat sourceFormat = formatReg.getFormatByFileExtension(suffix);converter.convert(inputStream, sourceFormat, out, targetFormat);connection.disconnect();return outputStreamConvertInputStream(out);}/*** ⽅法描述 outputStream转inputStream** @author tarzan*/public static ByteArrayInputStream outputStreamConvertInputStream(final OutputStream out) throws Exception {ByteArrayOutputStream baos=(ByteArrayOutputStream) out;return new ByteArrayInputStream(baos.toByteArray());}public static void main(String[] args) throws IOException {//convertNetFile("http://172.16.10.21/files/home/upload/department/base/201912090541573c6abdf2394d4ae3b7049dcee456d4f7.doc", ".pdf"); //convert("c:/Users/admin/Desktop/2.pdf", "c:/Users/admin/Desktop/3.pdf");}}4.serve层在线预览⽅法代码/*** @Description:系统⽂件在线预览接⼝* @Author: tarzan*/public void onlinePreview(String url, HttpServletResponse response) throws Exception {//获取⽂件类型String[] str = SmartStringUtil.split(url,"\\.");if(str.length==0){throw new Exception("⽂件格式不正确");}String suffix = str[str.length-1];if(!suffix.equals("txt") && !suffix.equals("doc") && !suffix.equals("docx") && !suffix.equals("xls")&& !suffix.equals("xlsx") && !suffix.equals("ppt") && !suffix.equals("pptx")){throw new Exception("⽂件格式不⽀持预览");}InputStream in=FileConvertUtil.convertNetFile(url,suffix);OutputStream outputStream = response.getOutputStream();//创建存放⽂件内容的数组byte[] buff =new byte[1024];//所读取的内容使⽤n来接收int n;//当没有读取完时,继续读取,循环while((n=in.read(buff))!=-1){//将字节数组的数据全部写⼊到输出流中outputStream.write(buff,0,n);}//强制将缓存区的数据进⾏输出outputStream.flush();//关流outputStream.close();in.close();}5.controler层代码@ApiOperation(value = "系统⽂件在线预览接⼝ by tarzan")@PostMapping("/api/file/onlinePreview")public void onlinePreview(@RequestParam("url") String url, HttpServletResponse response) throws Exception{fileService.onlinePreview(url,response);}到此这篇关于Java实现办公⽂档在线预览功能的⽂章就介绍到这了,更多相关Java ⽂档在线预览内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。
java实现文件上传功能
java实现⽂件上传功能本⽂实例为⼤家分享了java实现⽂件上传的具体代码,供⼤家参考,具体内容如下⼀、⽂件上传准备⼯作对于⽂件上传,浏览器在上传的过程中将⽂件以流的形式提交到服务器。
可以选择apache的commons-fileupload包作为⽂件上传组件,commons-fileupload包依赖于commons-io包。
可以在Maven导⼊该commons-fileupload包,Maven会帮我们导⼊依赖的jar包commons-io。
<dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.3</version></dependency>⼆、⽂件上传的主要步骤创建diskFileItemFactory对象,处理⽂件上传路径或者⼤⼩限制通过diskFileItemFactory对象作为ServletFileUpload类的参数,创建ServletFileUpload对象处理上传的⽂件三、代码实现在⽂件上传时,表单⼀定要加enctype=“multipart/form-data” 。
只有使⽤enctype=“multipart/form-data”,表单才会把⽂件的内容编码到HTML请求中。
默认enctype=“application/x-www-form-urlencoded”,表单的内容会按URL规则编码。
⽽enctype="multipart/form-data"不对字符编码。
在使⽤包含⽂件上传控件的表单时,必须使⽤该值。
method也⼀定要使⽤post请求。
<form action="/file.do" enctype="multipart/form-data" method="post"><p>上传⽤户:<input type="text" name="username"></p><p><input type="file" name="file1"></p><p><input type="file" name="file2"></p><p><input type="submit">|<input type="reset"></p></form>protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//判断上传的是普通表单还是带⽂件的表单if (!ServletFileUpload.isMultipartContent(req)) {return;}//创建上传⽂件保存的地址,⼀般创建在WEB-INF⽬录下,⽤户⽆法直接访问该⽬录下的⽂件String uploadPath = this.getServletContext().getRealPath("/WEB-INF/upload");File uploadFile = new File(uploadPath);//如果⽂件夹不存在,则创建⼀个if (!uploadFile.exists()) {uploadFile.mkdir();}//创建上传⼤⽂件的临时地址,⼀般⼏天后⾃动删除,⽤户可以⼿动删除或者转为永久⽂件// ⼀般创建在WEB-INF⽬录下,⽤户⽆法直接访问该⽬录下的⽂件String tempPath = this.getServletContext().getRealPath("/WEB-INF/temp");File tempFile = new File(tempPath);//如果⽂件夹不存在,则创建⼀个if (!tempFile.exists()) {tempFile.mkdir();}//1.创建diskFileItemFactory对象,处理⽂件上传路径或者⼤⼩限制DiskFileItemFactory factory = getDiskFileItemFactory(tempFile);//2.获取ServletFileUploadServletFileUpload upload = getServletFileUpload(factory);//3.处理上传的⽂件try {String msg = uploadParseRequest(upload, req, uploadPath);//转发req.setAttribute("msg",msg);req.getRequestDispatcher("info.jsp").forward(req, resp);} catch (FileUploadException e) {e.printStackTrace();}}public DiskFileItemFactory getDiskFileItemFactory(File file) {DiskFileItemFactory factory = new DiskFileItemFactory();//创建⼀个缓存区,当上传⽂件⼤于设置的缓存区时,将该⽂件放到临时⽬录factory.setSizeThreshold(1024 * 1024);//缓存区⼤⼩为1Mfactory.setRepository(file);//临时⽬录return factory;}public ServletFileUpload getServletFileUpload(DiskFileItemFactory factory) {ServletFileUpload upload = new ServletFileUpload(factory);//监听⽂件上传进度upload.setProgressListener(new ProgressListener() {@Overridepublic void update(long uploaded, long totalSize, int i) {System.out.println("已上传:"+(uploaded*100)/totalSize+"%");}});upload.setHeaderEncoding("UTF-8");//乱码处理upload.setFileSizeMax(1024 * 1024 * 10);//设置单个⽂件的最⼤值10Mupload.setSizeMax(1024 * 1024 * 100);//设置总共能上传⽂件的最⼤值100Mreturn upload;}public String uploadParseRequest(ServletFileUpload upload, HttpServletRequest req, String uploadPath) throws FileUploadException, IOException { String msg = "";//把前端请求解析,封装成⼀个List对象List<FileItem> fileItems = upload.parseRequest(req);for (FileItem fileItem : fileItems) {if (fileItem.isFormField()) {//判断上传的⽂件是普通的表单还是带⽂件的表单String name = fileItem.getName();//前端表单控件的name:usernameString value = fileItem.getString("UTF-8");//乱码处理System.out.println(name + ":" + value);} else {//判断为上传的⽂件//==================处理⽂件=====================String uploadFileName = fileItem.getName();//前端表单控件的nameSystem.out.println("上传的⽂件名:" + uploadFileName);if (uploadFileName.trim().equals("") || uploadFileName == null) {//可能存在不合法的情况continue;}String fileName = uploadFileName.substring(stIndexOf("/") + 1);//⽂件名String fileExtName = uploadFileName.substring(stIndexOf(".") + 1);//⽂件后缀名System.out.println("⽂件名:" + fileName + "--⽂件后缀:" + fileExtName);//==================存放地址==================String uuidPath = UUID.randomUUID().toString();//⽂件存储的真实路径String realPath = uploadPath + "/" + uuidPath;System.out.println("⽂件上传到的位置:"+realPath);//给每个⽂件创建⼀个⽂件夹File realPathFile = new File(realPath);if (!realPathFile.exists()) {//如果⽂件夹不存在,则创建⼀个realPathFile.mkdir();}//==================⽂件传输==================//获得⽂件上传的流InputStream inputStream = fileItem.getInputStream();//创建⼀个⽂件输出流FileOutputStream fileOutputStream = new FileOutputStream(realPath + "/" + fileName);//创建⼀个缓冲区byte[] buffer = new byte[1024 * 1024];//判断读取是否完毕int len = 0;while ((len = inputStream.read(buffer)) > 0) {fileOutputStream.write(buffer, 0, len);}//关闭流fileOutputStream.close();inputStream.close();msg = "上传成功";fileItem.delete();//上传成功,清除临时⽂件}}return msg;}⽂件上传的注意事项1、为保证服务器安全,上传的⽂件应该放在外界⽆法直接访问的⽬录下,例如放在WEB-INF⽬录下。
Java实现word文档在线预览,读取office(word,excel,ppt)文件
Java实现word⽂档在线预览,读取office(word,excel,ppt)⽂件想要实现word或者其他office⽂件的在线预览,⼤部分都是⽤的两种⽅式,⼀种是使⽤openoffice转换之后再通过其他插件预览,还有⼀种⽅式就是通过POI读取内容然后预览。
⼀、使⽤openoffice⽅式实现word预览主要思路是:1.通过第三⽅⼯具openoffice,将word、excel、ppt、txt等⽂件转换为pdf⽂件2.通过swfTools将pdf⽂件转换成swf格式的⽂件3.通过FlexPaper⽂档组件在页⾯上进⾏展⽰我使⽤的⼯具版本:openof:3.4.1swfTools:1007FlexPaper:这个关系不⼤,我随便下的⼀个。
推荐使⽤1.5.1JODConverter:需要jar包,如果是maven管理直接引⽤就可以操作步骤:1.office准备下载openoffice:从过往⽂件,其他语⾔中找到中⽂版3.4.1的版本下载后,解压缩,安装然后找到安装⽬录下的program ⽂件夹在⽬录下运⾏soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard如果运⾏失败,可能会有提⽰,那就加上 .\ 在运⾏试⼀下这样openoffice的服务就开启了。
2.将flexpaper⽂件中的js⽂件夹(包含了flexpaper_flash_debug.js,flexpaper_flash.js,jquery.js,这三个js⽂件主要是预览swf⽂件的插件)拷贝⾄⽹站根⽬录;将FlexPaperViewer.swf拷贝⾄⽹站根⽬录下(该⽂件主要是⽤在⽹页中播放swf⽂件的播放器)项⽬结构:页⾯代码:fileUpload.jsp<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>⽂档在线预览系统</title><style>body {margin-top:100px;background:#fff;font-family: Verdana, Tahoma;}a {color:#CE4614;}#msg-box {color: #CE4614; font-size:0.9em;text-align:center;}#msg-box .logo {border-bottom:5px solid #ECE5D9;margin-bottom:20px;padding-bottom:10px;}#msg-box .title {font-size:1.4em;font-weight:bold;margin:0 0 30px 0;}#msg-box .nav {margin-top:20px;}</style></head><body><div id="msg-box"><form name="form1" method="post" enctype="multipart/form-data" action="docUploadConvertAction.jsp"><div class="title">请上传要处理的⽂件,过程可能需要⼏分钟,请稍候⽚刻。
Java实现上传txt,doc,docx文件并且读取内容
Java实现上传txt,doc,docx⽂件并且读取内容1,前端上传/导⼊⽂件:var uploaderXls = new plupload.Uploader({//创建实例的构造⽅法runtimes: 'gears,html5,html4,silverlight,flash', //上传插件初始化选⽤那种⽅式的优先级顺序browse_button: 'btnImportXls', // 上传按钮url: "resumeController.do?importExcel", //远程上传地址flash_swf_url: 'plug-in/plupload/js/Moxie.swf', //flash⽂件地址silverlight_xap_url: 'plug-in/plupload/js/Moxie.xap', //silverlight⽂件地址filters: {max_file_size: '10mb', //最⼤上传⽂件⼤⼩(格式100b, 10kb, 10mb, 1gb)mime_types: [//允许⽂件上传类型{title: "files", extensions: "txt,doc,docx"}]},multipart_params:{isup:"1"},multi_selection: false, //true:ctrl多⽂件上传, false 单⽂件上传init: {FilesAdded: function(up, files) { //⽂件上传前debugger;uploaderXls.start();},FileUploaded: function(up, file, info) { //⽂件上传成功的时候触发info1 = JSON.parse(info.response);$("#resumeList").datagrid();layer.alert(info1.msg);//console.log(info.message);},Error: function(up,info, err) { //上传出错的时候触发layer.alert(err.message);}}});uploaderXls.init();2,后台接收⽂件,并读取:MultipartFile是spring的⼀个接⼝,通常我们可以在controller定义⽅法使⽤MultipartFile接收form表单提交的⽂件,然后将MultipartFile可以转化成⼀个⽂件。
Java实现在线预览Word,Excel,Ppt文档
Java实现在线预览Word,Excel,Ppt⽂档效果图:word:BufferedInputStream bis = null;URL url = null;HttpURLConnection httpUrl = null; // 建⽴链接url = new URL(urlReal);httpUrl = (HttpURLConnection) url.openConnection();// 连接指定的资源httpUrl.connect();// 获取⽹络输⼊流bis = new BufferedInputStream(httpUrl.getInputStream());String bodyText = null;WordExtractor ex = new WordExtractor(bis);bodyText = ex.getText();response.getWriter().write(bodyText);excel:BufferedInputStream bis = null;URL url = null;HttpURLConnection httpUrl = null; // 建⽴链接url = new URL(urlReal);httpUrl = (HttpURLConnection) url.openConnection();// 连接指定的资源httpUrl.connect();// 获取⽹络输⼊流bis = new BufferedInputStream(httpUrl.getInputStream());content = new StringBuffer();HSSFWorkbook workbook = new HSSFWorkbook(bis);for (int numSheets = 0; numSheets < workbook.getNumberOfSheets(); numSheets++) {HSSFSheet aSheet = workbook.getSheetAt(numSheets);// 获得⼀个sheetcontent.append("/n");if (null == aSheet) {continue;}for (int rowNum = 0; rowNum <= aSheet.getLastRowNum(); rowNum++) {content.append("/n");HSSFRow aRow = aSheet.getRow(rowNum);if (null == aRow) {continue;}for (short cellNum = 0; cellNum <= aRow.getLastCellNum(); cellNum++) {HSSFCell aCell = aRow.getCell(cellNum);if (null == aCell) {continue;}if (aCell.getCellType() == HSSFCell.CELL_TYPE_STRING) {content.append(aCell.getRichStringCellValue().getString());} else if (aCell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {boolean b = HSSFDateUtil.isCellDateFormatted(aCell);if (b) {Date date = aCell.getDateCellValue();SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");content.append(df.format(date));}}}}}response.getWriter().write(content.toString());ppt:BufferedInputStream bis = null;URL url = null;HttpURLConnection httpUrl = null; // 建⽴链接url = new URL(urlReal);httpUrl = (HttpURLConnection) url.openConnection();// 连接指定的资源httpUrl.connect();// 获取⽹络输⼊流bis = new BufferedInputStream(httpUrl.getInputStream());StringBuffer content = new StringBuffer("");SlideShow ss = new SlideShow(new HSLFSlideShow(bis));Slide[] slides = ss.getSlides();for (int i = 0; i < slides.length; i++) {TextRun[] t = slides[i].getTextRuns();for (int j = 0; j < t.length; j++) {content.append(t[j].getText());}content.append(slides[i].getTitle());}response.getWriter().write(content.toString());pdf:BufferedInputStream bis = null;URL url = null;HttpURLConnection httpUrl = null; // 建⽴链接url = new URL(urlReal);httpUrl = (HttpURLConnection) url.openConnection();// 连接指定的资源httpUrl.connect();// 获取⽹络输⼊流bis = new BufferedInputStream(httpUrl.getInputStream());PDDocument pdfdocument = null;PDFParser parser = new PDFParser(bis);parser.parse();pdfdocument = parser.getPDDocument();ByteArrayOutputStream out = new ByteArrayOutputStream();OutputStreamWriter writer = new OutputStreamWriter(out);PDFTextStripper stripper = new PDFTextStripper();stripper.writeText(pdfdocument.getDocument(), writer);writer.close();byte[] contents = out.toByteArray();String ts = new String(contents);response.getWriter().write(ts);txt:BufferedReader bis = null;URL url = null;HttpURLConnection httpUrl = null; // 建⽴链接url = new URL(urlReal);httpUrl = (HttpURLConnection) url.openConnection();// 连接指定的资源httpUrl.connect();// 获取⽹络输⼊流bis = new BufferedReader( new InputStreamReader(httpUrl.getInputStream())); StringBuffer buf=new StringBuffer();String temp;while ((temp = bis.readLine()) != null) {buf.append(temp);response.getWriter().write(temp);if(buf.length()>=1000){break;}}bis.close();。
Java通用文件上传功能实现
Java通用文件上传功能实现一、文件上传流程说明:Java文件上传功能是指在Java开发中,实现文件上传的功能,可以用于各种场景,如网站上传图片、文件管理系统等。
以下是一种常见的实现方式:1、创建一个包含文件上传功能的表单页面,用户可以选择要上传的文件并提交表单。
2、在后端Java代码中,接收表单提交的文件数据。
可以使用Apache Commons FileUpload库或Spring框架提供的MultipartFile类来处理文件上传。
3、对接收到的文件进行处理,可以将文件保存到服务器的指定位置,或者将文件存储到数据库中。
4、返回上传成功或失败的信息给用户。
二、代码实现,方案一:在Java中实现文件上传功能可以通过以下步骤来完成:1、创建一个HTML表单,用于选择要上传的文件:<form action="upload"method="post" enctype="multipart/form-data"> <input type="file" name="file" /><input type="submit" value="Upload" /></form>2、创建一个Servlet或者Controller来处理文件上传请求:@WebServlet("/upload")public class UploadServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) {// 获取上传的文件Part filePart = request.getPart("file");String fileName = filePart.getSubmittedFileName();// 指定上传文件的保存路径String savePath = "C:/uploads/" + fileName;// 将文件保存到指定路径filePart.write(savePath);// 返回上传成功的消息response.getWriter().println("File uploaded successfully!");}}3、配置web.xml(如果使用传统的Servlet方式)或者使用注解(如果使用Servlet 3.0+)来映射Servlet。
java在线预览方案
Java在线预览方案在现代Web应用程序中,我们经常需要对各种文档格式进行在线预览。
尤其是对于Java开发人员来说,如何实现Java在线预览方案是一个常见的问题。
本文将介绍一些常用的Java在线预览方案,以帮助开发人员选择适合自己项目的解决方案。
方案一:使用第三方工具库第一种方案是使用第三方开源工具库来实现Java在线预览。
这些工具库通常提供了丰富的API和工具,可以轻松地将各种文档格式转换为可预览的HTML或其他格式。
以下是一些常用的第三方工具库:Apache POIApache POI是一个Java类库,用于读取和写入Microsoft Office格式的文档。
它支持预览.doc、.docx、.xls、.xlsx等文件格式,并提供了用于将这些文件转换为HTML的API。
使用Apache POI,开发人员可以轻松地将Office文档转换为HTML,并在Web应用程序中进行在线预览。
PDFBoxPDFBox是一个用于处理PDF文件的Java库。
它可以读取和写入PDF文件,并提供了将PDF文档转换为图片或HTML的功能。
使用PDFBox,开发人员可以将PDF文件转换为HTML,并在Web应用程序中进行在线预览。
Apache TikaApache Tika是一个Java工具库,用于提取和分析文档中的元数据和内容。
它支持广泛的文档格式,包括Word文档、Excel文件、PDF文件等。
开发人员可以使用Apache Tika从不同的文档格式中提取内容,并将其转换为HTML进行在线预览。
方案二:使用在线预览服务另一种方案是使用在线预览服务来实现Java在线预览。
在线预览服务通常是基于云服务提供的,开发人员可以通过API将文档上传到服务中进行预览。
以下是一些常用的在线预览服务:Google Docs ViewerGoogle Docs Viewer是一个由Google提供的在线预览服务。
它支持多种文档格式,包括Word文档、Excel文件、PDF文件等。
Java实现web在线预览office文档与pdf文档实例
Java实现web在线预览office⽂档与pdf⽂档实例https:///ziliao/1768?spm=5176.8246799.blogcont.24.1PxYoX摘要:本⽂讲的是Java实现web在线预览office⽂档与pdf⽂档实例, 1、⾸先我们需要找到可以把office转换成pdf的⽅法,查找资料发现有openoffice这⼀软件可以把office转换成pdf,这⼀软件先下载下来,然后记住⾃⼰安装的在那个位置。
然后在cmd环境下进⼊安装⽬录的program⽬1、⾸先我们需要找到可以把office转换成pdf的⽅法,查找资料发现有openoffice这⼀软件可以把office转换成pdf,这⼀软件先下载下来,然后记住⾃⼰安装的在那个位置。
然后在cmd环境下进⼊安装⽬录的program⽬录,输⼊打开openoffice的命令:soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard输⼊完成之后在任务管理器可以看见soffice.bin的进程在任务管理器,这⼀服务就启动成功。
当然在代码中转换office2pdf我们还需要⼀些架包。
下载jodconverter-2.2.2架包,然后复制到lib⽬录下,引⼊架包就可以了。
这个架包有如下包:⽂档与pdf⽂档实例-office⽂档在线预览">有⼀些项⽬重复的可以删除,根据实际情况⾃⼰处理。
2、我们需要找到转换pdf2swf的⽅法。
查找资料发现swftools这个软件可以把pdf转换成swf⽂件。
把它下下来安装好就可以了。
3、我们需要⼀个展⽰swf⽂件的容器,发现有flexpaper这个插件。
⽽且展⽰效果还不错。
所以我们需要下载这个插件。
使⽤这个插件需要有三个js⽂件。
分别是:jquery.js、flexpaper_flash.js、flexpaper_flash_debug.js。
Java文件上传的几种方式
Java⽂件上传的⼏种⽅式⽂件上传与⽂件上传⼀样重要。
在Java中,要实现⽂件上传,可以有两种⽅式:1、通过Servlet类上传2、通过Struts框架实现上传这两种⽅式的根本还是通过Servlet进⾏IO流的操作。
⼀、通过Servlet类上传1、编写Sevlet类package com.chanshuyi.upload;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;@SuppressWarnings("serial")public class FileUploadServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {InputStream in = request.getInputStream();/* 设置⽂件保存地址 */File saveFile = new File(this.getServletContext().getRealPath("/uploaded"), "hello.txt");System.out.println("[⽂件保存地址]:" + saveFile.getAbsolutePath());/* 保存 */FileOutputStream out = new FileOutputStream(saveFile);byte[] buf = new byte[4096];int readLength = -1;while((readLength = in.read(buf)) != -1){out.write(buf);}out.flush();out.close();in.close();response.getWriter().write("<html><script>alert('Uploaded Succeed!')</script></html>");}}这⾥⽤纯Servlet实现的时候,⽆法获取⽂件的⽂件名以及⼀些其他信息。
java实现图片或文件的上传功能具体思路及代码
java实现图片或文件的上传功能具体思路及代码一、思路现在不管是博客论坛还是企业办公,都离不开资源的共享。
通过文件上传的方式,与大家同分享,从而达到大众间广泛的沟通和交流,我们既可以从中获得更多的知识和经验,也能通过他人的反馈达到自我改进和提升的目的。
下面我就为大家介绍web项目中的这一上传功能,那么文件是如何从本地发送到服务器的呢?看我慢慢道来:首先,我们创建一个新的web工程,在工程的WebRoot目录下新建一个upload文件夹,这样当我们将该工程部署到服务器上时,服务器便也生成个upload文件夹,用来存放上传的资源。
然后,在WebRoot目录下新建一个jsp文件,主要实现的作用就是选择上传的文件,提交至servlet来进行处理详细代码如下:一个form将文件信息通过post方式传送到指定的servlet二、代码复制代码代码如下:<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><base <%=basePath%>"><title>My JSP 'upload.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" >--></head><body><form action="/upload/UpLoad" method="post" enctype="multipart/form-data">请选择上传的图片或文件:<input type="file" name="fileName"/><input type="submit" value="上传"/></form></body></html>可以看到,我们将数据提交到工程下的upload/UpLoad。
Java实现文件上传
Java实现⽂件上传最近⾃⼰在做⼀个⼩系统玩的时候涉及到了⽂件的上传,于是在⽹上找到Java上传⽂件的⽅案,最后确定使⽤common-fileupload实现上传操作。
需求说明⽤户添加页⾯有⼀个“上传”按钮,点击按钮弹出上传界⾯,上传完成后关闭上传界⾯。
所需Jar包commons.fileupload-1.2.0.jar、commons.logging-1.1.1.jar、commons.beanutils-1.8.0.jar、commons.collections-3.2.0.jar、commons.io-1.4.0.jar、ng-2.1.0.jar 实现效果代码实现⾸先编写核⼼代码,Javascript打开上传页⾯,并且从上传页获取返回参数,最后数据返回给回调函数callback:Js代码1. /**2. * 跳转到上传页3. * functionId:功能ID4. * fileType:⽂件类型5. * maxSize:⽂件容量上限6. * callback:回调函数,返回三个参数:⽂件真名、⽂件存放名和⽂件⼤⼩7. */8. function openUpload(functionId,fileType,maxSize,callback){9. var url = root+"/CommonController.jhtml?method=goFileUpload&";10. if(functionId!=null){11. url = url + "functionId="+functionId+"&";12. }13. if(fileType!=null){14. url = url + "fileType="+fileType+"&";15. }16. if(maxSize!=null){17. url = url + "maxSize="+maxSize;18. }19. var win = window.showModalDialog(url,"","dialogWidth:300px;dialogHeight:150px;scroll:no;status:no");20. if(win != null){21. var arrWin = win.split(",");22. callback(arrWin[0],arrWin[1],arrWin[2]);23. }24. }⽤户添加页⾯相关代码,点击“上传”按钮时调⽤上⾯的核⼼js代码,并且获取返回值Html代码1. <script>2. .......3.4. function openUpload_(){5. openUpload(null,'JPG,GIF,JPEG,PNG','5',callback);6. }7.8. /**9. * 回调函数,获取上传⽂件信息10. * realName真实⽂件名11. * saveName⽂件保存名12. * maxSize⽂件实际⼤⼩13. */14. function callback(realName,saveName,maxSize){15. $("#photo_").val(saveName);16. //回调后其它操作17. }18. </script>19.20. <tr>21. <td>头像:</td>22. <td>23. <input type="hidden" name="photo" id="photo_"></input>24. <input type="button" onclick="openUpload_()" value="上传"/>25. </td>26. </tr>⽂件上传的JSP代码,需要注意的是在head标签内添加<base target="_self">以防⽌页⾯跳转时弹出新窗⼝,⽤户选择指定⽂件,点击上传时就提交表单访问指定后台代码Html代码1. <%@ include file="/WEB-INF/jsp/header.jsp" %>2. <%@ page language="java" contentType="text/html; charset=UTF-8"3. pageEncoding="UTF-8"%>4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd">5. <html>6. <head>7. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">8. <meta http-equiv="pragma" content="no-cache" />9. <base target="_self">10. <title>⽂件上传</title>11. </head>12. <body>13. <h5>⽂件上传</h5><hr/>14. <form id="file_upload_id" name="file_upload_name" action="<%=root%>/CommonController.jhtml?method=doFileUpload" method="post" enctype="multipart/form-data">15. <input type="hidden" name="functionId" value="${functionId}"/>16. <input type="hidden" name="fileType" value="${fileType}"/>17. <input type="hidden" name="maxSize" value="${maxSize}"/>18. <div><input type="file" name="file_upload"/></div>19. <c:if test="${maxSize!=null}">20. <div style="font: 12">⽂件最⼤不能超过${maxSize}MB</div>21. </c:if>22. <c:if test="${fileType!=null}">23. <div style="font: 12">⽂件格式必须是:${fileType}</div>24. </c:if>25. <div><input type="submit" value="上传"/></div>26. </form>27. </body>28. </html>CommonController⽬前有两个⽅法,⼀个是跳转到上传页⾯的⽅法,⼀个是执⾏上传操作的⽅法doFileUpload,上传⽅法运⾏的⼤概逻辑是:⾸先获取页⾯的请求参数,fileType⽤于限制上传⽂件格式,maxSize⽤于限制上传⽂件最⼤值,随后创建上传⽬录上传即可。
java学习案例-上传文件
客户端向服务端上传文件【案例介绍】1.案例描述编写一个客户端向服务端上传文件的程序,要求使用TCP通信的的知识,将本地机器输入的路径下的文件上传到D盘中名称为upload的文件夹中。
并把客户端的IP地址加上count标识作为上传后文件的文件名,即IP(count)的形式。
其中,count随着文件的增多而增大,例如127.0.0.(1).jpg、127.0.0.(2).jpg。
2.效果显示上传文件之前上传文件之后【案例目标】●学会分析“文件上传”思路。
●根据思路独立完成“文件上传”任务的源代码编写、编译及运行。
●掌握网络通信中TCP协议的编程原理。
●掌握TCP网络通信ServerSocket和Socket的使用。
●掌握多线程的使用。
【案例分析】(1)根据任务描述中使用TCP通信的知识实现文件上传功能可知,要实现此功能,需要定义一个服务器接收文件的程序和一个客户端上传文件的程序。
(2)首先要编写服务器端程序来接收文件。
服务器端需要使用ServerSocket对象的accept()方法接收客户端的请求,由于一个服务器可能对于多个客户端,所以当客户端与服务器端简历连接后,服务器需要单独开启一个新的线程来处理与客户端的交互,这时需要在服务器端编写开启新线程的方法。
在新线程的方法中,需要获取客户端的端口号,并且使用输入输出流来传输文件到指定的目录中。
(3)编写客户端的功能代码,客户端功能的实现,因为是用户自己输入上传文件。
所以要定义键盘录入。
录入后需要使用Socket类来创建客户对象,并通过输入输出流来定义指定的文件。
(4)最后我们启动程序,先启动服务端程序,再运行客户端程序来测试上传的结果。
【案例实现】(1)首先编写服务器端的程序,用来接收文件,其代码具体如下所示。
FileServer.java1 package chapter0903;2 import java.io.File;3 import java.io.FileOutputStream;4 import java.io.InputStream;5 import java.io.OutputStream;6 import .ServerSocket;7 import .Socket;8 public class FileServer {9 public static void main(String[] args) throws Exception {10 //创建ServerSocket对象11 ServerSocket serverSocket = new ServerSocket(10001);12 while (true) {13 // 调用accept()方法接收客户端请求,得到Socket对象14 Socket s = serverSocket.accept();15 // 每当和客户端建立Socket连接后,单独开启一个线程处理和客户端的交互16 new Thread(new ServerThread(s)).start();17 }18 }19 }20 class ServerThread implements Runnable {21 // 持有一个Socket类型的属性22 private Socket socket;23 // 构造方法中把Socket对象作为实参传入24 public ServerThread(Socket socket) {25 this.socket = socket;26 }27 public void run() {28 // 获取客户端的IP地址29 String ip = socket.getInetAddress().getHostAddress();30 // 上传图片个数31 int count = 1;32 try {33 InputStream in = socket.getInputStream();34 // 创建上传图片目录的File对象35 File parentFile = new File("D:\\upload\\");36 // 如果不存在,就创建这个目录37 if (!parentFile.exists()) {38 parentFile.mkdir();39 }40 // 把客户端的IP地址作为上传文件的文件名41 File file = new File(parentFile, ip + "(" + count +42 ").jpg");43 while (file.exists()) {44 // 如果文件名存在,则把count++45 file = new File(parentFile, ip + "(" + (count++) +46 ").jpg");47 }48 // 创建FileOutputStream对象49 FileOutputStream fos = new FileOutputStream(file);50 // 定义一个字节数组51 byte[] buf = new byte[1024];52 // 定义一个int类型的变量len,初始值为053 int len = 0;54 // 循环读取数据55 while ((len = in.read(buf)) != -1) {56 fos.write(buf, 0, len);57 }58 // 获取服务端的输出流59 OutputStream out = socket.getOutputStream();60 // 上传成功后向客户端写出“上传成功”61 out.write("上传成功".getBytes());62 // 关闭输出流对象63 fos.close();64 // 关闭Socket对象65 socket.close();66 } catch (Exception e) {67 throw new RuntimeException(e);68 }69 }70 }运行结果如图所示。
Java实现在线预览功能
Java实现在线预览功能java实现在线预览功能,需要⽤到 jacob.dll jacob.jar 预览pdf所需js pdfobject.min.js将上传⽂件转为pdf保存。
<div class="control-group"><label class="control-label">⽂件:</label><div class="controls"><input type="file" name="file" id="ck_attach_path" style="width:98%;"/></div></div>后台保存⽂件并将⽂件转换为pdf@RequiresPermissions("ha01:haHyjhb:edit")@RequestMapping(value = "save")public String save(HaHyjhb haHyjhb, @RequestParam MultipartFile file,Model model, RedirectAttributes redirectAttributes,HttpServletRequest request, HttpServletResponse response) throws IOException, ParseException { haHyjhb.setBh(hybh);String xdlj = request.getSession().getServletContext().getRealPath("userfiles")+"\\hy"+haHyjhb.getLx()+"\\"+dateStr+"\\"+hybh+"\\";String path = "";if(!file.isEmpty()){HaHyzlb haHyzlb = new HaHyzlb();SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");//设置⽇期格式String filename= df.format(new Date()); // 保存在服务器的随机⽂件名//材料编号haHyzlb.setClhb(filename);haHyzlb.setHybh(hybh);xdlj=xdlj.replaceAll("\\\\", "/");haHyzlb.setLj(xdlj);haHyzlb.setCllx("0");String aa[]=file.getOriginalFilename().split("[.]");String fileName =filename+"."+aa[aa.length-1];haHyzlb.setClywjm(file.getOriginalFilename());haHyzlb.setClmc(fileName);//保存⽂件publicUtils.saveFile(file, xdlj,filename, request, response);haHyzlbService.save(haHyzlb);}else{request.setAttribute("msg", "未选择需上传的⽂件");}haHyjhbService.save(haHyjhb);addMessage(redirectAttributes, "保存会议计划成功");}return "redirect:"+Global.getAdminPath()+"/ha01/haHyjhb/?repage";}public static void saveFile(@RequestParam MultipartFile file,String xdlj,String filename, HttpServletRequest request, HttpServletResponse response) {String path = "";String pdfname= filename + ".pdf"; // 装换成pdf⽂件的名称String refilename= ""; // 上传⽂件的名称if(!file.isEmpty()){//获取上传⽂件的原名称refilename=file.getOriginalFilename();String aa[]=refilename.split("[.]");filename=filename+"."+aa[aa.length-1];xdlj=xdlj.replaceAll("\\\\", "/");File fpath = new File(xdlj);if(!fpath.exists()){fpath.mkdirs();}try {MultipartFile mfile = file;if(mfile!=null){File localFile = new File(xdlj+filename);path = localFile.getPath();try {mfile.transferTo(localFile);//将上传⽂件写到服务器上指定的⽂件ToPDF top=new ToPDF();top.convert2PDF(xdlj+filename, xdlj+pdfname);} catch (IllegalStateException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}} catch (Exception e) {e.printStackTrace();request.setAttribute("msg", refilename+"上传失败");}} else{request.setAttribute("msg", "未选择需上传的⽂件");}}转换pdf⼯具类package com.thinkgem.jeesite.modules.bc.bc01.web;import java.io.File;import com.jacob.activeX.ActiveXComponent;import FailException;import Thread;import .Dispatch;public class ToPDF {private static final int wdFormatPDF = 17;private static final int xlTypePDF = 0;private static final int ppSaveAsPDF = 32;private static final int msoTrue = -1;private static final int msofalse = 0;/*jacob配置* 把jacob.dll放⼊ Java\jdk1.5.0_06\jre\bin⽬录下.把jacob.jar放⼊ Java\jdk1.5.0_0\jre\lib\ext*///直接调⽤这个⽅法即可public boolean convert2PDF(String inputFile, String pdfFile) {String suffix = getFileSufix(inputFile);File file = new File(inputFile);if(!file.exists()){System.out.println("⽂件不存在!");return false;}if(suffix.equals("pdf")){System.out.println("PDF not need to convert!");return false;}if(suffix.equals("doc")||suffix.equals("docx")||suffix.equals("txt")){return word2PDF(inputFile,pdfFile);}else if(suffix.equals("ppt")||suffix.equals("pptx")){return ppt2PDF(inputFile,pdfFile);}else if(suffix.equals("xls")||suffix.equals("xlsx")){return excel2PDF(inputFile,pdfFile);}else{System.out.println("⽂件格式不⽀持转换!");return false;}}public static String getFileSufix(String fileName){int splitIndex = stIndexOf(".");return fileName.substring(splitIndex + 1);}public boolean word2PDF(String inputFile,String pdfFile){ActiveXComponent app = null;Dispatch doc = null;boolean result=true;try{//打开word应⽤程序app = new ActiveXComponent("Word.Application");//设置word不可见app.setProperty("Visible", false);//获得word中所有打开的⽂档,返回Documents对象Dispatch docs = app.getProperty("Documents").toDispatch();//调⽤Documents对象中Open⽅法打开⽂档,并返回打开的⽂档对象Document doc = Dispatch.call(docs,"Open",inputFile,false,true).toDispatch();Dispatch.call(doc,"ExportAsFixedFormat",pdfFile,wdFormatPDF //word保存为pdf格式宏,值为17);result= true;}catch(Exception e){result= false;}finally {if (doc != null) {Dispatch.call(doc, "Close");}if (app != null) {app.invoke("Quit");}}return result;}public boolean excel2PDF(String inputFile,String pdfFile){ActiveXComponent app = null;Dispatch excel = null;boolean result=true;try{app = new ActiveXComponent("Excel.Application");app.setProperty("Visible", false);Dispatch excels = app.getProperty("Workbooks").toDispatch();excel = Dispatch.call(excels,"Open",inputFile,false,true).toDispatch();Dispatch.call(excel,"ExportAsFixedFormat",xlTypePDF,pdfFile);result= true;}catch(Exception e){result= false;}finally {if (excel != null) {Dispatch.call(excel, "Close");}if (app != null) {app.invoke("Quit");return result;}public boolean ppt2PDF(String srcFilePath, String pdfFilePath){ActiveXComponent app = null;Dispatch ppt = null;boolean result=true;try {ComThread.InitSTA();app = new ActiveXComponent("PowerPoint.Application");Dispatch ppts = app.getProperty("Presentations").toDispatch();// 因POWER.EXE的发布规则为同步,所以设置为同步发布ppt = Dispatch.call(ppts, "Open", srcFilePath, true,// ReadOnlytrue,// Untitled指定⽂件是否有标题false// WithWindow指定⽂件是否可见).toDispatch();Dispatch.call(ppt, "SaveAs", pdfFilePath, 32); //ppSaveAsPDF为特定值32result=true; // set flag true;} catch (ComFailException e) {result=false;} catch (Exception e) {result=false;} finally {if (ppt != null) {Dispatch.call(ppt, "Close");}if (app != null) {app.invoke("Quit");}ComThread.Release();}return result;}}预览⽂件 <c:if test="${haHyjhb.cllist ne null and haHyjhb.cllist.size() ne 0}"></br ><h4>会议⽂件列表</h4></br ><table id="contentTable" class="table table-striped table-bordered table-condensed"><thead><tr><th>⽂件名</th><th>预览</th></tr></thead><tbody><c:forEach items="${haHyjhb.cllist}" var="haHyjhb"><tr><td>${haHyjhb.clywjm }</td><td><a href="javascript:void(0);" onclick="filescan('${haHyjhb.id}')">预览</a></td></tr></c:forEach></tbody></table></c:if>function filescan(fileid){top.$.jBox.open("iframe:${ctx}/ha01/haHyjhb/scan?id="+fileid, "⽂件预览",800,$(top.document).height()-100,{buttons:{"确定":"ok", "关闭":true}, submit:function(v, h, f){}, loaded:function(h){$(".jbox-content", top.document).css("overflow-y","hidden");}, closed:function (){}});}<%@ page contentType="text/html;charset=UTF-8" %><%@ include file="/WEB-INF/views/include/taglib.jsp"%><html><head><title>资料信息管理</title><style type="text/css">html,body,#content{width: 100%;height: 100%;margin: 0;padding: 0;}</style><script type="text/javascript">window.onload = function (){ //项⽬名称var filepath="${pageContext.request.contextPath}/"+"${saMyclbClxx.lj}".split("/dxzjzx_wz/")[1];var name="${saMyclbClxx.clmc}";var a=name.split(".");var hzm=a[a.length-1];//后缀名var wjm=name.split("."+hzm)[0];//⽂件名if(hzm=="txt"||hzm=="doc"||hzm=="docx"||hzm=="xls"||hzm=="xlsx"||hzm=="ppt"||hzm=="pptx"||hzm=="pdf"){filepath = filepath+wjm+".pdf";PDFObject.embed(filepath, "#content" );//var success = new PDFObject({ url:filepath ,pdfOpenParams: { scrollbars: '0', toolbar: '0', statusbar: '0'}}).embed("content1");}else if(hzm=="png"||hzm=="jpeg"||hzm=="gif"||hzm=="jpg"){$("#content").html("<img style='background-size:contain|cover;width:100%;height: auto;' src='"+filepath+name+"' id='ylimg'/>");}else if(hzm=="wav"||hzm=="mp3"||hzm=="midi"||hzm=="wma"||hzm=="swf"||hzm=="flv"||hzm=="wmv"||hzm=="asf"||hzm=="asx"||hzm=="mid"||hzm=="rm"||hzm=="rmvb"||hzm=="mp4"||hzm=="mov"||hzm=="avi"||hzm== $("#content").html("<video src='"+filepath+name+"' controls='controls'></video>");}else{alert("该⽂件格式不⽀持预览");}}</script><ul class="nav nav-tabs"></ul><br/><form:form id="inputForm" modelAttribute="saSqmyxxb" action="${ctx}/sa01/saSqmyxxb/save" method="post" class="form-horizontal"> <sys:message content="${message}"/><div id="content"></div></form:form><script type="text/javascript" src='${ctxStatic}/js/pdfobject.min.js'></script></body></html>。
java实现在线预览功能
java实现在线预览功能最近系统需要做在线预览,于是我就上⽹上找现成的插件,查阅相关资料,他们说⽬前主流实现在线预览的⽅案有以下3种:1.flash 的flexpaper 将⽂档转换为swf格式,然后使⽤flash在⽹页中浏览2.使⽤开源的软件openoffice+pdf2htmlEx,利⽤openoffice的接⼝先将⽂档转换为pdf格式,然后在使⽤pdf2htmlEx将⽂档转换为html直接在⽹页中显⽰,3.⾃⼰搭建⼀个⽂档预览服务器,基于office web app,也就是微软的office online,开源的内容管理系统KodExplorer就是这么⼲的。
⽂档在线预览基本上就这么⼏种⽅案.经过测试,只需要将⽂件转换为PDF格式,再输出到浏览器中就可以实现在线预览了,这也是性能最⾼的⼀种⽅式,避免了多次转换所消耗的时间。
将⽂件转换为PDF使⽤的是openOffice+jodConverter。
openOffice可以去⽹上下载(免费的⽂字处理软件,注意是⼀款实实在在的软件,⽀持MAC OS, LINUX,WINDOS…,具体可以去⽹上看),需要下载安装。
⽹上⼈说使⽤openOffice需要开启服务,但是这边我是在代码中控制开启和关闭openOffice的,因为openOffice服务⼤约要占100M内存,所以不使⽤时就不要开启啦/****/package com.nd.core.util;import java.io.File;import java.util.regex.Pattern;import mons.logging.Log;import mons.logging.LogFactory;import org.artofsolving.jodconverter.OfficeDocumentConverter;import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration;import org.artofsolving.jodconverter.office.OfficeManager;import org.springframework.util.StringUtils;/*** 这是⼀个⼯具类,主要是为了使Office2003-2007全部格式的⽂档(.doc|.docx|.xls|.xlsx|.ppt|.pptx)* 转化为pdf⽂件<br>* Office2010的没测试<br>** @date 2017-03-03* @author jjc**/public class Office2PDF {private static final Log LOG = LogFactory.getLog(Office2PDF.class);/*** 使Office2003-2007全部格式的⽂档(.doc|.docx|.xls|.xlsx|.ppt|.pptx) 转化为pdf⽂件<br>** @param inputFilePath* 源⽂件路径,如:"e:/test.docx"* @return*/public static File openOfficeToPDF(String inputFilePath) {return office2pdf(inputFilePath);}/*** 根据操作系统的名称,获取 3的安装⽬录<br>* 如我的 3安装在:C:/Program Files (x86)/ 3<br>** @return 3的安装⽬录*/public static String getOfficeHome() {String osName = System.getProperty("");System.out.println("操作系统名称:" + osName);if (Pattern.matches("Linux.*", osName)) {return "/opt/3";} else if (Pattern.matches("Windows.*", osName)) {return "C:/Program Files/OpenOffice 4";} else if (Pattern.matches("Mac.*", osName)) {return "/Applications/.app/Contents/";}return null;}* 连接 并且启动** @return*/public static OfficeManager getOfficeManager() {DefaultOfficeManagerConfiguration config = new DefaultOfficeManagerConfiguration();// 设置 3的安装⽬录config.setOfficeHome(getOfficeHome());// 启动OpenOffice的服务OfficeManager officeManager = config.buildOfficeManager();officeManager.start();return officeManager;}/*** 转换⽂件** @param inputFile* @param outputFilePath_end* @param inputFilePath* @param outputFilePath* @param converter*/public static File converterFile(File inputFile, String outputFilePath_end, String inputFilePath,OfficeDocumentConverter converter) {File outputFile = new File(outputFilePath_end);// 假如⽬标路径不存在,则新建该路径if (!outputFile.getParentFile().exists()) {outputFile.getParentFile().mkdirs();}converter.convert(inputFile, outputFile);System.out.println("⽂件:" + inputFilePath + "\n转换为\n⽬标⽂件:" + outputFile + "\n成功!");return outputFile;}/*** 使Office2003-2007全部格式的⽂档(.doc|.docx|.xls|.xlsx|.ppt|.pptx) 转化为pdf⽂件<br>** @param inputFilePath* 源⽂件路径,如:"e:/test.docx"* @param outputFilePath* ⽬标⽂件路径,如:"e:/test_docx.pdf"* @return*/public static File office2pdf(String inputFilePath) {OfficeManager officeManager = null;try {if (StringUtils.isEmpty(inputFilePath)) {("输⼊⽂件地址为空,转换终⽌!");return null;}File inputFile = new File(inputFilePath);// 转换后的⽂件路径String outputFilePath_end = getOutputFilePath(inputFilePath);if (!inputFile.exists()) {("输⼊⽂件不存在,转换终⽌!");return null;}// 获取OpenOffice的安装路劲officeManager = getOfficeManager();// 连接OpenOfficeOfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager);return converterFile(inputFile, outputFilePath_end, inputFilePath, converter);} catch (Exception e) {LOG.error("转化出错!", e);} finally {// 停⽌openOfficeif (officeManager != null) {officeManager.stop();}}return null;}/*** 获取输出⽂件** @param inputFilePath* @returnpublic static String getOutputFilePath(String inputFilePath) {String outputFilePath = inputFilePath.replaceAll("." + getPostfix(inputFilePath), ".pdf");return outputFilePath;}/*** 获取inputFilePath的后缀名,如:"e:/test.pptx"的后缀名为:"pptx"<br>** @param inputFilePath* @return*/public static String getPostfix(String inputFilePath) {return inputFilePath.substring(stIndexOf(".") + 1);}public static void main(String[] args) {Office2PDF.openOfficeToPDF("/Users/JJC/Downloads/20170302汽修服务测试反馈.docx");}}View Code以上代码需要注意的是openOffice的安装路劲,需要⾃⾏更改getOfficeHome()函数的返回值。