簡體   English   中英

Java請求getInputStream返回空流

[英]Java request getInputStream return empty stream

我有來自doPost請求的getInputStream和之前設置文件名的問題。 它給了我一個文件名正確但空文件0kB的文件。 如果我評論設置fileName比我不會得到空文件。

我的過程:從Android應用程序我將PDF文件歸檔到上傳服務器,如http POST。 在服務器上,doPost就像下面的方法。

如何設置文件名並獲取非空文件?

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    
    String fileName = null;
    //Get all the parts from request and write it to the file on server
    //getFileName return filename
    for (Part part : request.getParts()) {
        fileName = getFileName(part);
    }
    File saveFile = new File(SAVE_DIR + fileName);

    // opens input stream of the request for reading data
    InputStream inputStream = request.getInputStream();

    // opens an output stream for writing file
    FileOutputStream outputStream = new FileOutputStream(saveFile);

    byte[] buffer = new byte[BUFFER_SIZE];
    int bytesRead = -1;

    while ((bytesRead = inputStream.read(buffer)) != -1) {
        outputStream.write(buffer, 0, bytesRead);           
    }
    outputStream.close();
    inputStream.close();

    // sends response to client
    response.getWriter().print("UPLOAD DONE");

}

編輯:

private String getFileName(Part part) {
    String contentDisp = part.getHeader("content-disposition");
    System.out.println("content-disposition header= " + contentDisp);
    String[] tokens = contentDisp.split(";");
    for (String token : tokens) {
        if (token.trim().startsWith("filename")) {
            return token.substring(token.indexOf("=") + 2, token.length() - 1);
        }
    }
    return "";
}

方案

//Get the right Part
 final Part filePart = request.getPart("uploadedfile");
 //Writes file to location 
 filePart.write(filePart.getSubmittedFileName());

Part提供了一個getInputStream()方法,所以你應該使用它來代替request.getInputStream(); 當你處理零件時。

然而...

Part.write()是一種將此上傳項目寫入磁盤的便捷方法,因此您只需使用part.write(SAVE_DIR + part.getSubmittedFileName()); 並且它都是為您處理的(請注意, getSubmittedFileName()僅適用於Servlet 3.1)。

在執行outputstream.close()之前執行outputstream.flush()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM