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 &