问题标签 [apache-commons-fileupload]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - InputStream 在 Apache FileUpload API 中关闭
这是一个非常具体的问题。我希望这里有人对 FileUpload API 有很好的了解。
如果您使用过此 API,您应该知道,当超过文件的最大大小时,无法读取下一个项目,因为抛出 FileSizeLimitExceededException 并且如果您尝试再调用一次hasNext()
方法来迭代下一个项目由于输入流已关闭并且您尝试再次读取它,因此引发 IOException。
这种情况非常糟糕,因为无法读取下一个参数。假设这种形式:
现在文件超过了最大大小。结果:
读取“param1”。
“myFile”生成 FileSizeLimitExceededException。
未读取“param2”。
我正在尝试重写部分 API - 没有运气 - 因为我想阅读下一项(在本例中为“param2”)。
有人遇到过同样的问题吗?你是怎么修好的?
谢谢。
编辑:嗯,我已经实现了 BalusC 提出的解决方案。未来:
FileUpload 包装器
FileUpload 包装器的使用
如果您认为此包装器需要其他任何内容,请直接说出来。我不接受它作为真正的解决方案,因为理想的是修改和修复 API 本身。
java - 为什么在使用 DiskFileItem 时会出现不确定的文件删除错误?
我的上传 servlet 不断向我抛出一个异常,说我试图替换的文件(接近我的代码末尾)无法(看似)随机删除。我不知道是什么原因造成的,因为我没有使用任何流并且文件没有在我的浏览器中打开。有谁知道这可能是什么原因造成的?我对此一无所知,因为代码对我来说似乎是正确的。这是我第一次使用 DiskFileItem,所以我不确定是否有任何细微差别需要处理。
请记住,它有时有效,有时无效。我迷路了。
问题领域:
我的系统输出总是说文件和目标都存在。我试图让上传覆盖现有文件。
完整代码:(& pastebin)
编辑:要添加,getHome() 和“home”并没有真正在代码中,这只是为了保护我的主路径
servlets - 获取文件大小 - Apache Commons 文件上传
我正在使用 Servlet 和 JSP 构建一个 Web 应用程序。我已经使用 apache commons 库构建了一个文件上传功能。我想限制用户上传大文件 - 因此将限制设置为 20 MB。
我正在使用Fileitem.getSize()
我猜是读取整个文件以确定大小的方法来获取大小。如果用户尝试上传几 GB 大小的文件,那会不会在应用服务器上增加很多开销?获取文件大小是否有更好的选择?
jsp - 使用apache common fileupload在jsp中获取上传文件的扩展名
最初,我开始将图像存储在数据库中,以实现安全和轻松备份的目的。
所以我从来没有遇到过获取文件扩展名的问题。
现在我面临问题,因为数据库负载。
所以我计划将图像存储在一个文件夹中,然后我将显示这些图像。
但我需要重命名这些文件并将扩展名存储在数据库中,以便我可以直接访问。
但是由于我是在数据库中对图像进行字符串处理,所以我从不关心文件的扩展名。
因为我必须访问图像文件,所以我必须知道扩展名。
如何在 Apache 通用文件上传中获取文件的扩展名。
jsf - 如何让 JSF 使用 Apache Commons FileUpload 上传文件
我知道如何使用 Primefaces 或使用 Tomahawk 进行文件上传,但是,我正在尝试使用 Apache Commons FileUpload 进行文件上传,到目前为止我遇到了一些障碍。即使我的表单使用multipart/form-data
,当我提交表单时,内容类型也变为application/x-www-form-urlencoded
. 这是我的代码
这是我的ViewBean
所以当我尝试打印上面的内容类型时,它显示了application/x-www-form-urlencoded
. 如果我放入ajax="false"
my p:commandButton
,则该submit()
方法甚至不会被调用,但如果我取出enctype="multipart/form-data"
(仍然保持ajax="false"
),submit()
则被调用但它不是 multipart,它是application/x-www-form-urlencoded
,所以 apache commons fileupload 抛出异常,因为它不是 multipart。似乎无论我做什么,我似乎都无法获得多部分请求。请帮忙
java - 请求完成时Tomcat删除文件?
我遇到了一个非常奇怪的问题。我正在使用commons-fileupload
(1.2.1) 处理我的 webapp 中的文件上传(托管在 tomcat 7.0.23 中,并且distributable
设置了标志)。一旦我从我的(no ) 获得一个DiskFileItem
实例,我就使用它的方法来存储文件(在配置为使用的同一目录中,以防它需要在文件流入时将文件写入磁盘)。问题是这个新文件(由我明确创建和命名)在请求完成处理后被删除。可以想象,当我需要再次访问该文件时,这是有问题的。DiskFileItemFactory
FileCleaningTracker
write
DiskFileItemFactory
看起来可能相关的花絮:
- 有问题的目录不是 servlet 上下文中的默认临时目录,也不是 Tomcat 目录下的目录。
- 在备用代码路径中,我立即复制该文件(而不是在不同的请求中),并且该副本不会被删除。
- 即使我
chmod a-w
在请求完成之前的文件,它仍然会在请求完成时被删除。
谢谢你的帮助。
java - 如何在apache commons上传中设置上传大小
嗨,我正在使用 apache commons upload 来上传文件
但是有了这个我最多只能上传 20MB。如何在这段代码中设置上传文件的大小。
java - commons-fileupload 和 Liferay 的问题
我正在尝试自定义 Liferay Web Form portlet 以接受文件上传,除了将文件附加到要发送的电子邮件之外,我已经完成了几乎所有工作。
从表单中获取字段:
然后是邮件的构建和发送:
尝试处理文件上传并将文件附加到消息时出现以下控制台错误:
我的DiskFileItemFactory
配置是否正确?我可能做错了什么?
谢谢。
java - 在 Apache FileUpload Streaming API 中读取文件之前确定文件上传的大小
有两种方法可以使用 Apache FileUpload 库。
上传文件
http://commons.apache.org/fileupload/using.html
和流式文件上传 API
http://commons.apache.org/fileupload/streaming.html
它们都工作得很好,只是流 API 似乎没有办法在处理流之前检查文件大小。
这是因为 Streaming API 从根本上不知道文件大小,还是因为我需要手动读取一些标头或其他内容来获取 Multipart 上传大小?
java - Spring中的异步文件上传
这就是我正在做的事情。我想通过 Ajax 将多部分文件上传到我的 Spring Web 应用程序。当服务器收到 POST 请求时,它会在数据库中创建一个票号。然后它启动一个处理实际文件上传的线程。然后服务器返回票号。
我正在使用 CommonsMultipartResolver 来处理请求,并且我已将 resolveLazily 标志设置为 true,以便不会立即解析 Multipart。
所以这是我所拥有的
所以这里的重点是票号可以用来获取进度更新。假设正在上传一个大文件。使文件上传 POST(在本例中为 Ajax 请求)的客户端可以异步执行此操作并取回票号。客户端可以使用该票号来确定文件上传的阶段并在另一个页面中显示信息。
另一种用途是,我可以有一个 HTML 页面,它向服务器请求所有票号,然后显示服务器上发生的所有文件上传的“实时”视图。
我无法让它工作,因为一旦控制器返回,Spring 就会在 CommonsMultipartResolver 中调用 cleanupMultipart()。由于 resolveLazily 标志设置为 false,所以当 cleanupMultipart() 被调用时,它将开始解析和初始化多部分文件。这会导致调用“request.getFile("theFile");”之间的竞争条件。在 runnable 和 cleanupMultipart() 调用中最终导致异常。
有人有想法么?我是否通过想要进行后端异步文件处理来打破某种 HTTP 合同。