[英]Why does JavaMail BodyPart.getInputStream() return an empty stream when using IMAP, but not when using POP3?
[英]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.