![](/img/trans.png)
[英]Is there a reliable way to limit the size of a file upload via java servlet?
[英]How to limit uploaded file size in java servlet
我需要使用html type='file'
將圖像從客戶端上傳到服務器,效果很好,到目前為止,我可以從客戶端發送文件並在servlet上接收,但是現在我需要將servlet中的圖像大小限制為2MB,如果大於2MB,我需要向客戶端發送一條有關圖像大小的錯誤消息。
這是我收到的發送圖像的servlet代碼:
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
MultipartRequest multipartRequest = new MultipartRequest(request, "D:\\");
out.print("Successfully Uploaded");
}
到目前為止,它的工作是接收圖像並將其保存在D:
目錄中,而我不想先保存圖像然后檢查圖像大小,而是要對MultipartRequest說些什么,如果您收到的圖像大於2MB,則會發送錯誤。
提前致謝:)
由於您尚未指定什么是“ MultipartRequest”類,因此我假設您正在使用oreilly包。
它具有一個公共MultipartRequest(HttpServletRequest請求,String saveDirectory,int maxPostSize)引發IOException構造函數,該構造函數采用max文件大小參數。
如果上載的文件大小大於maxPostSize,它將拋出IOException。 您可能會捕獲此異常並返回錯誤響應。
創建MultipartRequest
實例時,可以限制上傳文件的大小。
MultipartRequest(javax.servlet.http.HttpServletRequest request, java.lang.String saveDirectory)
構造一個新的MultipartRequest來處理指定的請求,將所有上傳的文件保存到給定目錄,並將上傳大小限制為1 MB。
MultipartRequest(javax.servlet.http.HttpServletRequest request, java.lang.String saveDirectory, int maxPostSize)
構造一個新的MultipartRequest來處理指定的請求,將所有上傳的文件保存到給定目錄,並將上傳大小限制為指定的長度。
在Servlet上使用此代碼並立即嘗試
private boolean isMultipart;
private String filePath;
private int maxFileSize = 50 * 1024;
private int maxMemSize = 4 * 1024;
private File file ; `
DiskFileItemFactory factory = new DiskFileItemFactory();
// maximum size that will be stored in memory
factory.setSizeThreshold(maxMemSize);
// Location to save data that is larger than maxMemSize.
factory.setRepository(new File("c:\\temp"));
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// maximum file size to be uploaded.
upload.setSizeMax( maxFileSize );
try {
// Parse the request to get file items.
List fileItems = upload.parseRequest(request);
// Process the uploaded file items
Iterator i = fileItems.iterator();
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet upload</title>");
out.println("</head>");
out.println("<body>");
while ( i.hasNext () ) {
FileItem fi = (FileItem)i.next();
if ( !fi.isFormField () ) {
// Get the uploaded file parameters
String fieldName = fi.getFieldName();
String fileName = fi.getName();
String contentType = fi.getContentType();
boolean isInMemory = fi.isInMemory();
long sizeInBytes = fi.getSize();
// Write the file
if( fileName.lastIndexOf("\\") >= 0 ) {
file = new File( filePath + fileName.substring( fileName.lastIndexOf("\\"))) ;
} else {
file = new File( filePath + fileName.substring(fileName.lastIndexOf("\\")+1)) ;
}
fi.write( file ) ;
out.println("Uploaded Filename: " + fileName + "<br>");
}
}
out.println("</body>");
out.println("</html>");
} catch(Exception ex) {
System.out.println(ex);
}
文件大小為字節形式,因此您可以根據您的要求為mb添加最大文件大小
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.