¿Cómo puedo compartir un archivo de PowerPoint con NodeJS?

He ShowPresentation.jsp que carga un archivo PPT desde la computadora y convierte cada diapositiva en imagen mediante el servlet de Java.

Entonces necesito compartirlo en tiempo real por NodeJS, ¿cómo puedo hacerlo? Esto es ShowPresentation.jsp contenido.

<!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>
                                                                                                                      
</div>

<div id="slide"><p align="center">
        <img id="imageslide" src="Viewer?hidFileName=<%=request.getAttribute("fileName")%>"></img>
    </p>
</div>

<% }%>
<input id="hidFileName" type="hidden" value="<%=request.getAttribute("fileName")%>"></input>

y este contenido de servlet 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;
}

}

preguntado el 03 de mayo de 12 a las 13:05

Comparte lo que has probado. No podemos adivinar qué has hecho o qué errores estás recibiendo. Además, no escribiremos todo por ti. -

Pareces muy nuevo en el foro, para ayudarte mejor tienes que hacer tu pregunta poco elaborada y más realista. Pruébalo y obtendrás la mejor de las mejores respuestas. -

1 Respuestas

¿Por qué necesitas nodejs en absoluto? Si son solo archivos estáticos después de que se han convertido, ¿por qué no simplemente servir los archivos de imagen con un servidor de activos estáticos, por ejemplo, nginx?

Parece que solo necesita un servidor de afirmación estático. Si desea utilizar el nodo para hacer esto, servidor http hará el trabajo por ahora:

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

Luego ve a http://localhost en su navegador web.

contestado el 05 de mayo de 12 a las 11:05

@Sara: ¿puedes compartir qué conocimientos tienes? - Asera

el primer comando está bien, pero el segundo comando me muestra esto -bash: cd: my/assets: No such file or directory - Sara

@Sara, debe 'cambiar el directorio' (cd) al directorio en el que se encuentran sus activos, luego ejecute el servidor http. - timoxley

@timoxley gracias, cuando voy a la carpeta que contiene activos y ejecuto sudo http-server -p 80 &, esto aparece en la terminal [1] 2624, y nada en localhost, son my mi proyecto floder? - Sara

ejecute kill 2624. y sí, mi es la carpeta de su proyecto. No estoy seguro de cuál es el problema, lo siento! - timoxley

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.