Java 中止从servlet上载以限制文件大小

Java 中止从servlet上载以限制文件大小,java,http,servlets,upload,Java,Http,Servlets,Upload,我想限制可以上传到应用程序的文件大小。为了实现这一点,当上传的文件大小超过限制时,我想从服务器端中止上传过程 有没有一种方法可以在不等待HTTP请求完成的情况下从服务器端中止上载过程?您可以在servlet的doPost()方法中尝试这样做 multi = new MultipartRequest(request, dirName, FILE_SIZE_LIMIT); if(submitButton.equals(multi.getParameter("Submit"))) { ou

我想限制可以上传到应用程序的文件大小。为了实现这一点,当上传的文件大小超过限制时,我想从服务器端中止上传过程


有没有一种方法可以在不等待HTTP请求完成的情况下从服务器端中止上载过程?

您可以在servlet的doPost()方法中尝试这样做

multi = new MultipartRequest(request, dirName, FILE_SIZE_LIMIT); 

if(submitButton.equals(multi.getParameter("Submit")))
{
    out.println("Files:");
    Enumeration files = multi.getFileNames();
    while (files.hasMoreElements()) {
    String name = (String)files.nextElement();
    String filename = multi.getFilesystemName(name);
    String type = multi.getContentType(name);
    File f = multi.getFile(name);
    if (f.length() > FILE_SIZE_LIMIT)
    {
        //show error message or
        //return;
        return;
    }
}

这样,您就不必等待完全处理HttpRequest,并且可以将错误消息返回或显示给客户端。HTH

您可以这样做(使用库):

公共类UploadFileServiceImpl扩展了HttpServlet
{
受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)引发IOException
{
response.setContentType(“文本/普通”);
尝试
{
FileItem uploadItem=getFileItem(请求);
if(uploadItem==null)
{
//错误
}   
//在这里添加逻辑
}
捕获(例外情况除外)
{
response.getWriter().write(“错误:文件上载失败:+ex.getMessage());
}
}
private FileItem getFileItem(HttpServletRequest请求)引发FileUploadException
{
DiskFileItemFactory=新的DiskFileItemFactory();
//在这里加上你自己的限额
setSizeThreshold(DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD);
ServletFileUpload upload=新的ServletFileUpload(工厂);
//在这里加上你自己的限额
upload.setSizeMax(DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD);
列表项=upload.parseRequest(请求);
Iterator it=items.Iterator();
while(it.hasNext())
{
FileItem=(FileItem)it.next();
//在此处搜索文件项
如果(!item.isFormField()&&
//选中字段名以访问文件项。。。
{
退货项目;
}
}
返回null;
}
}

您可以使用apache commons文件上载库,该库还允许限制文件大小


使用JavaEE 6/Servlet 3.0,首选的方法是在Servlet上使用,如下所示:

@MultipartConfig(location="/tmp", fileSizeThreshold=1024*1024, 
    maxFileSize=1024*1024*5, maxRequestSize=1024*1024*5*5)
public class UploadFileServiceImpl extends HttpServlet ...

如果你使用的是JavaEE 6/Servlet 3.0,请看一下我的答案。我不确定这会缺少什么,但当所有限制都设置为5MB以下时,我可以很高兴地上传50MB。我的帖子:
curl--request post--data binary@path/to/big.ziphttp://localhost:8080/endpoint
@MultipartConfig(location="/tmp", fileSizeThreshold=1024*1024, 
    maxFileSize=1024*1024*5, maxRequestSize=1024*1024*5*5)
public class UploadFileServiceImpl extends HttpServlet ...