Jsp 如何与NodeJS共享PowerPoint文件?

Jsp 如何与NodeJS共享PowerPoint文件?,jsp,node.js,servlets,Jsp,Node.js,Servlets,我有一个ShowPresentation.jsp,它从计算机上传一个PPT文件,并通过Javaservlet将每张幻灯片转换成图像 然后我需要通过NodeJS实时分享它,我如何才能做到呢? 这是ShowPresentation.jspcontent <!DOCTYPE > <html> <head> <script type="text/javascript"> var current_slide_number = 1;

我有一个
ShowPresentation.jsp
,它从计算机上传一个PPT文件,并通过Javaservlet将每张幻灯片转换成图像

然后我需要通过NodeJS实时分享它,我如何才能做到呢? 这是
ShowPresentation.jsp
content

<!DOCTYPE >
<html>
<head> 
    <script type="text/javascript">
        var current_slide_number = 1;
        function button(slideNumber){
            current_slide_number = current_slide_number + slideNumber;
            var image = document.getElementById('imageslide');
            var fileName = document.getElementById('hidFileName');
            image.src = 'Viewer?slideNumber='+current_slide_number+'&hidFileName='+fileName.value;
        }
    </script>
    <title>PowerPoint to JPEG</title>
</head>
<body>
    <div>
        <form method="post" action="Viewer" enctype="multipart/form-data" >
            <p >
                Upload a file:</p>
            <input type="file" name="datafile" size="40"> <input type="submit" value="Upload">
        </form>
    </div>
    <% if (request.getAttribute("fileName") != null) {
    %>
    <div id="slide-controls">
        <b>Please navigate through the slides</b>

无功电流\u滑块\u编号=1;
功能按钮(slideNumber){
当前幻灯片编号=当前幻灯片编号+幻灯片编号;
var image=document.getElementById('imageslide');
var fileName=document.getElementById('hidFileName');
image.src='Viewer?slideNumber='+current\u slide\u number+'&hidFileName='+fileName.value;
}
PowerPoint到JPEG

上载文件:

请浏览幻灯片

">

这个servlet content Viewer.java

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.hslf.model.Slide;
import org.apache.poi.hslf.usermodel.SlideShow;
public class Viewer extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    int slideNumber = 1; 
    BufferedImage image = null;
    ServletOutputStream os = null;
    try{
        if (request.getParameter("hidFileName") != null){
            String fileName = request.getParameter("hidFileName");
        if(request.getParameter("slideNumber") != null)
            slideNumber = Integer.parseInt(request.getParameter("slideNumber"));
        image = getSlideAsImage(fileName, slideNumber);
        os = response.getOutputStream();
        ImageIO.write(image, "jpeg", os );
        }
        else {
            response.sendRedirect("StartPresentation.jsp");
        }   
    }
    catch (Exception e){
                if (os != null)
            os.close();
    }       
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      String contentType = request.getContentType();
      String realPath = getServletContext().getRealPath("/");
        if ((contentType != null) && (contentType.indexOf("multipart/form-data") >= 0)) 
        {
            DataInputStream in = new DataInputStream(request.getInputStream());
            int formDataLength = request.getContentLength();
            byte dataBytes[] = new byte[formDataLength];
            int byteRead = 0;
            int totalBytesRead = 0;
            while (totalBytesRead < formDataLength) {
                byteRead = in.read(dataBytes, totalBytesRead, formDataLength);
                totalBytesRead += byteRead;
            }
            String file = new String(dataBytes);
            String saveFile = file.substring(file.indexOf("filename=\"") + 10);
            saveFile = saveFile.substring(0, saveFile.indexOf("\n"));
            saveFile = saveFile.substring(saveFile.lastIndexOf("\\")+ 1, saveFile.indexOf("\""));
            int lastIndex = contentType.lastIndexOf("=");
            String boundary = contentType.substring(lastIndex + 1, contentType.length());
            int pos;
            pos = file.indexOf("filename=\"");
            pos = file.indexOf("\n", pos) + 1;
            pos = file.indexOf("\n", pos) + 1;
            pos = file.indexOf("\n", pos) + 1;
            int boundaryLocation = file.indexOf(boundary, pos) - 4;
            int startPos = ((file.substring(0, pos)).getBytes()).length;
            int endPos = ((file.substring(0, boundaryLocation)).getBytes()).length;
            System.out.println("After File Name: "+ saveFile);
            String filePath = realPath + "/" +  saveFile;
            FileOutputStream fileOut = new FileOutputStream(filePath);
            fileOut.write(dataBytes, startPos, (endPos - startPos));
            fileOut.close();
            request.setAttribute("fileName", saveFile);
            getServletContext().getRequestDispatcher("/StartPresentation.jsp").forward(request, response);
        }
}
private BufferedImage getSlideAsImage(String fileName, int slideNumber) throws Exception
{
    BufferedImage image = null; 
    String realPath = getServletContext().getRealPath("/");
    String filePath = realPath + "/" + fileName;
    FileInputStream in = new FileInputStream(filePath);
    SlideShow ppt = new SlideShow(in);
    Slide[] slides = ppt.getSlides();
    Dimension pgsize = ppt.getPageSize();
    image = new BufferedImage(pgsize.width, pgsize.height,BufferedImage.TYPE_INT_RGB);
    Graphics2D graphics = image.createGraphics();
    graphics.setPaint(Color.white);
    graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height));
    if (slideNumber < 1)
        slideNumber = 1;
    else if (slideNumber > slides.length)
        slideNumber = slides.length;
    slides[slideNumber - 1].draw(graphics);
    return image;
}
导入java.awt.Color;
导入java.awt.Dimension;
导入java.awt.Graphics2D;
导入java.awt.geom.Rectangle2D;
导入java.awt.image.buffereImage;
导入java.io.DataInputStream;
导入java.io.FileInputStream;
导入java.io.FileOutputStream;
导入java.io.IOException;
导入javax.imageio.imageio;
导入javax.servlet.ServletException;
导入javax.servlet.ServletOutputStream;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
导入org.apache.poi.hslf.model.Slide;
导入org.apache.poi.hslf.usermodel.SlideShow;
公共类查看器扩展HttpServlet{
@凌驾
受保护的void doGet(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{
int-slideNumber=1;
BuffereImage图像=空;
ServletOutputStream os=null;
试一试{
if(request.getParameter(“hidFileName”)!=null){
字符串文件名=request.getParameter(“hidFileName”);
if(request.getParameter(“slideNumber”)!=null)
slideNumber=Integer.parseInt(request.getParameter(“slideNumber”));
image=getSlideAsImage(文件名,slideNumber);
os=response.getOutputStream();
写入(图像,“jpeg”,操作系统);
}
否则{
sendRedirect(“StartPresentation.jsp”);
}   
}
捕获(例外e){
如果(os!=null)
os.close();
}       
}
@凌驾
受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)引发ServletException、IOException{
String contentType=request.getContentType();
字符串realPath=getServletContext().getRealPath(“/”);
if((contentType!=null)&&(contentType.indexOf(“多部分/表单数据”)>=0))
{
DataInputStream in=新的DataInputStream(request.getInputStream());
int formDataLength=request.getContentLength();
字节数据字节[]=新字节[formDataLength];
int byteRead=0;
int totalBytesRead=0;
while(totalBytesReadslides.length)
slideNumber=slides.length;
幻灯片[slideNumber-1]。绘制(图形);
返回图像;
}

}你为什么需要nodej?如果转换后只是静态文件,为什么不使用静态资产服务器(如nginx)为图像文件提供服务

听起来您只需要一个静态断言服务器。如果要使用node执行此操作,将暂时执行以下操作:

npm install -g http-server
cd my/assets
sudo http-server -p 80 &

然后在web浏览器中转到。

分享您的尝试。我们猜不出你做了什么,或者
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.hslf.model.Slide;
import org.apache.poi.hslf.usermodel.SlideShow;
public class Viewer extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    int slideNumber = 1; 
    BufferedImage image = null;
    ServletOutputStream os = null;
    try{
        if (request.getParameter("hidFileName") != null){
            String fileName = request.getParameter("hidFileName");
        if(request.getParameter("slideNumber") != null)
            slideNumber = Integer.parseInt(request.getParameter("slideNumber"));
        image = getSlideAsImage(fileName, slideNumber);
        os = response.getOutputStream();
        ImageIO.write(image, "jpeg", os );
        }
        else {
            response.sendRedirect("StartPresentation.jsp");
        }   
    }
    catch (Exception e){
                if (os != null)
            os.close();
    }       
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      String contentType = request.getContentType();
      String realPath = getServletContext().getRealPath("/");
        if ((contentType != null) && (contentType.indexOf("multipart/form-data") >= 0)) 
        {
            DataInputStream in = new DataInputStream(request.getInputStream());
            int formDataLength = request.getContentLength();
            byte dataBytes[] = new byte[formDataLength];
            int byteRead = 0;
            int totalBytesRead = 0;
            while (totalBytesRead < formDataLength) {
                byteRead = in.read(dataBytes, totalBytesRead, formDataLength);
                totalBytesRead += byteRead;
            }
            String file = new String(dataBytes);
            String saveFile = file.substring(file.indexOf("filename=\"") + 10);
            saveFile = saveFile.substring(0, saveFile.indexOf("\n"));
            saveFile = saveFile.substring(saveFile.lastIndexOf("\\")+ 1, saveFile.indexOf("\""));
            int lastIndex = contentType.lastIndexOf("=");
            String boundary = contentType.substring(lastIndex + 1, contentType.length());
            int pos;
            pos = file.indexOf("filename=\"");
            pos = file.indexOf("\n", pos) + 1;
            pos = file.indexOf("\n", pos) + 1;
            pos = file.indexOf("\n", pos) + 1;
            int boundaryLocation = file.indexOf(boundary, pos) - 4;
            int startPos = ((file.substring(0, pos)).getBytes()).length;
            int endPos = ((file.substring(0, boundaryLocation)).getBytes()).length;
            System.out.println("After File Name: "+ saveFile);
            String filePath = realPath + "/" +  saveFile;
            FileOutputStream fileOut = new FileOutputStream(filePath);
            fileOut.write(dataBytes, startPos, (endPos - startPos));
            fileOut.close();
            request.setAttribute("fileName", saveFile);
            getServletContext().getRequestDispatcher("/StartPresentation.jsp").forward(request, response);
        }
}
private BufferedImage getSlideAsImage(String fileName, int slideNumber) throws Exception
{
    BufferedImage image = null; 
    String realPath = getServletContext().getRealPath("/");
    String filePath = realPath + "/" + fileName;
    FileInputStream in = new FileInputStream(filePath);
    SlideShow ppt = new SlideShow(in);
    Slide[] slides = ppt.getSlides();
    Dimension pgsize = ppt.getPageSize();
    image = new BufferedImage(pgsize.width, pgsize.height,BufferedImage.TYPE_INT_RGB);
    Graphics2D graphics = image.createGraphics();
    graphics.setPaint(Color.white);
    graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height));
    if (slideNumber < 1)
        slideNumber = 1;
    else if (slideNumber > slides.length)
        slideNumber = slides.length;
    slides[slideNumber - 1].draw(graphics);
    return image;
}
npm install -g http-server
cd my/assets
sudo http-server -p 80 &