2016-07-01 7 views
0

Ich benutze Jaxrs zum Hochladen von Dateien * .xlsx. Ist es möglich, diese Dateien hochzuladen und im Speicher zu verarbeiten? Ich möchte nur diese Datei lesen, mit Apache POI verarbeiten und Informationen bei DataBase speichern. Ohne sie in ServerIst es möglich, eine Datei.xlsx hochzuladen, zu verarbeiten, ohne sie auf dem Server zu speichern? Ich benutze Jaxrs

Dank

+0

Ich bin nicht vertraut mit Jaxrs haben, aber auf die erste Antwort überprüfen [diese Frage ] (http://StackOverflow.com/questions/2222468/how-to-upload-files-to-server-using-jsp-servlet), das ausführlich beschreibt, wie Datei-Uploads behandelt werden. Es wird nicht auf dem Server gespeichert, es sei denn, Sie ergreifen ähnliche Maßnahmen wie im Abschnitt "Speichern der hochgeladenen Datei". – nicholas79171

Antwort

1

traurig für späte Antwort zu speichern, kann diese Antwort jemand helfen.

Ja, es ist möglich, den Inhalt einer hochgeladenen .xlsx-Datei im Speicher zu lesen [ohne den hochgeladenen Inhalt in einer physischen Datei zu speichern]. Dieser Ansatz erfordert jedoch mehr Speicher, da der gesamte Dateiinhalt im Puffer gespeichert wird.

unter Servlet, ist ein funktionierendes Beispiel dafür, mit geringfügiger Änderung können Sie diesen Code bei Bedarf in JSP konvertieren.

übergeben Sie die hochgeladene Datei Eingangsstrom beim Erstellen von XSSFWorkbook-Objekt, wie unten gezeigt, können Sie den Dateiinhalt wie im Beispielcode lesen.

fügen Sie apache-poi jars und apache commons-fileupload.jar im Ordner WEB-INF/lib hinzu, damit dieser Code korrekt funktioniert.

import java.io.IOException; 
import java.io.InputStream; 
import java.io.PrintWriter; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import org.apache.commons.fileupload.*; 
import org.apache.commons.fileupload.disk.*; 
import org.apache.commons.fileupload.servlet.*; 
import org.apache.commons.io.FilenameUtils; 
import org.apache.poi.openxml4j.opc.OPCPackage; 
import org.apache.poi.ss.usermodel.Cell; 
import org.apache.poi.ss.usermodel.Row; 
import org.apache.poi.xssf.usermodel.XSSFSheet; 
import org.apache.poi.xssf.usermodel.XSSFWorkbook; 

import java.util.List; 
import java.util.Iterator; 

@WebServlet("/FileUploadServlet") 
public class FileUploadServlet extends HttpServlet { 


    protected void doPost(HttpServletRequest request, 
      HttpServletResponse response) throws ServletException, IOException { 
     response.setContentType("text/html"); 
     PrintWriter out = response.getWriter(); 
     OPCPackage pkg = null; 
     XSSFWorkbook xlsxbook = null; 
     InputStream xlsxContentStream = null; 

     try { 


       boolean isMultipart = ServletFileUpload.isMultipartContent(request); 

       if (isMultipart) { 

        List<FileItem> items = new ServletFileUpload(
          new DiskFileItemFactory()).parseRequest(request); 
        for (FileItem item : items) { 
         if (!item.isFormField()) { 
          String fieldName = item.getFieldName(); 
          String fileName = FilenameUtils.getName(item.getName()); 

          xlsxContentStream = item.getInputStream(); 

          pkg = OPCPackage.open(xlsxContentStream); 
          xlsxbook = new XSSFWorkbook(pkg); 
          XSSFSheet sheet = xlsxbook.getSheetAt(0); 

          Iterator<Row> itr = sheet.iterator(); 

          while (itr.hasNext()) { 
           Row row = itr.next(); 

           // Iterating over each column of Excel file 
           Iterator<Cell> cellIterator = row.cellIterator(); 
           String text = ""; 
           double num = 0; 
           while (cellIterator.hasNext()) { 

            Cell cell = cellIterator.next(); 

            switch (cell.getCellType()) { 
            case Cell.CELL_TYPE_STRING: 
             text = cell.getStringCellValue(); 
             break; 
            case Cell.CELL_TYPE_NUMERIC: 
             num = cell.getNumericCellValue(); 
             break; 
            default: 

            } 
           } 

           out.print(text + " " + num); 
           //call database insert method here and pass the xlsx column values 
          } 

         } 
        } 
       } 
       out.flush(); 

      } catch (FileUploadException e) { 
       throw new ServletException("Cannot parse multipart request.", e); 
      } catch (Exception e) { 
       throw new ServletException("", e); 
      } finally { 
       if(null!=xlsxContentStream){ xlsxContentStream.close();} 
       if(null!=pkg){ pkg.close();} 

      } 

     } 


protected void doGet(HttpServletRequest request, 
      HttpServletResponse response) throws ServletException, IOException { 
     doPost(request, response); 
    } 

} 

Ihre jsp/html-Datei sollte enctype = "multipart/form-data" in Form

<form action="FileUploadServlet" name="form2" method="post" enctype="multipart/form-data"> 
Select a .xlsx File to upload :<input type="file" name="file" id="file" size="50" /> 
<input type="submit" value="Upload xlsx File"/> 
</form> 
Verwandte Themen