gpt4 book ai didi

java - 如何使用 Apache 文件上传实用程序根据文件名设置最大文件大小

转载 作者:行者123 更新时间:2023-11-30 05:02:13 44 4
gpt4 key购买 nike

我有一个要求,需要针对不同的情况允许不同的最大文件大小。示例:允许 5 MB 用于简历,仅 3 MB 用于成绩单。

我正在使用以下代码使用 apache 文件上传实用程序上传文件。

        ServletFileUpload upload = new ServletFileUpload();
upload.setSizeMax(500000000);
upload.setProgressListener(aupl);
FileItemIterator iter = upload.getItemIterator(req);

while (iter.hasNext()) {
FileItemStream item = iter.next();
if (!item.isFormField()) {
form_name = item.getFieldName();
InputStream stream = item.openStream();
FileOutputStream fop = new FileOutputStream(new File(temp_location));
Streams.copy(stream, fop, true);
}
}

我找到字段名称的唯一方法是使用 item.getFieldName() ,并且只有在执行 upload.getItemIterator 之后才能做到这一点,但必须在 upload.getItemIterator 之前在上传时设置 setSizeMax(500..)叫做。

有办法解决这个问题吗?如果没有解决方案,您能否建议任何其他可以处理此问题的文件上传 API。

谢谢

最佳答案

如果您改为循环遍历 FileItem 对象而不是 FileItemStream 对象,则您所需要做的就是设置一些恒定的最大大小值并将每个项目与适当的值进行比较。如果某个项目超出了大小,请适当处理它(抛出新的异常,丢弃文件,无论您想做什么),否则继续正常运行。

final long MAX_RESUME_SIZE = 5242880; // 5MB -> 5 * 1024 * 1024
final long MAX_TRANS_SIZE = 3145728; // 3MB -> 3 * 1024 * 1024

DiskFileItemFactory factory = new DiskFileItemFactory();
String fileDir = "your write-to location";
File dest = new File(fileDir);
if(!dest.isDirectory()){ dest.mkdir(); }
factory.setRepository(dest);
ServletFileUpload upload = new ServletFileUpload(factory);

for (FileItem item: upload.parseRequest(request)) { // request -> the HttpServletRequest
if(!item.isFormField(){
if(evaluateSize(item)){
// handle as normal
}else{
// handle as too large
}
}
} // end while

private boolean evaluateSize(FileItem item){
if(/* type is Resume */ && item.getSize() <= MAX_RESUME_SIZE){
return true;
}else if(/* type is Transcript */ && item.getSize() <= MAX_TRANS_SIZE){
return true;
}

// assume too large
return false;
}

当然,如果有超过两种类型的文件,您将必须添加更多逻辑,但您可以看到在写入之前比较文件大小非常简单。

关于java - 如何使用 Apache 文件上传实用程序根据文件名设置最大文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6299465/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com