今天练习Struts2是时,发现了一个有趣的现象:Struts2上传后的文件,跟原文件有出入,变大了。
无论是图片文件还是文本文件都是这样。我特地对文本文件进行了对比,发现上传后的文件有重复的字符。并且俺对前后两个文件的属性进行了查看对比。发现原文件和上传后文件的属性很有意思,如下:
原文件
上传后文件
那这个到底是框架上传文件时自身问题,还是我们在保存文件时有问题呢,我特地打印了框架上传后的临时文件大小,发现跟原文件一样仍是:3175.
那问题就出在保存文件这一关了,我的代码是这样的。
InputStream fis = new FileInputStream(file);
OutputStream fos = new FileOutputStream(filePath);
byte[] bs = new byte[2*1024];
int i ;
while ((i = fis.read(bs)) > 0) {
fos.write(bs);
}
fis.close();
fos.flush();
fos.close();
问题会在哪里呢,后来发现问题在
fos.write(bs);
将其改成:
fos.write(bs, 0, i);
上传前后文件就一致了。
问题应该是缓存数组处理的问题了,看来流的那些方法不是无用的,不能偷懒。
注:最好配置上Struts2的cleanup过滤器
<!-- Struts Cleanup Filter -->
<filter>
<filter-name>struts2-cleanup</filter-name>
<filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2-cleanup</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- 大小: 4.1 KB
- 大小: 4 KB
分享到:
相关推荐
在处理文件上传功能时,Struts框架会涉及到文件大小的限制,以防止恶意用户上传过大的文件导致服务器资源耗尽。本篇文章将详细探讨Struts文件上传大小限制的问题。 首先,我们需要理解文件上传的基本流程。在Struts...
可以通过验证文件扩展名、限制文件大小和类型,以及将上传的文件保存到指定的安全目录来提高安全性。 6. **优化与拓展** 对于大量文件上传,可以考虑使用多线程处理,提高上传效率。还可以添加进度条显示、断点续...
本篇将详细介绍Struts2中如何进行文件大小设置,以及涉及到的拦截器配置和灵活性。 首先,我们需要理解Struts2的文件上传机制。在Struts2中,文件上传是通过`<s:file>`标签实现的,这个标签会创建一个`File`对象,...
Struts框架通过解析这个格式化的请求,可以获取到上传文件的信息。 1. **配置Struts2 Action**:在Struts2中,我们需要创建一个Action类来处理文件上传请求。这个类通常需要实现`ServletRequestAware`接口,以便...
2. **设置Struts2配置**:配置文件需要指定允许上传的文件大小、类型等。例如,使用`<constant>`标签设置`struts.multipart.parser`为`jakarta`,以启用`Commons FileUpload`。 3. **编写Action类**:在Action类中...
在这个“struts2上传文件源代码”中,我们将深入探讨Struts2如何实现文件上传功能,以及涉及到的相关知识点。 首先,文件上传是Web应用中常见的功能,它允许用户从本地计算机选择文件并将其发送到服务器。在Struts2...
在Struts2框架中,处理文件上传是一项常见且重要的功能,尤其当涉及到大文件上传时,往往会遇到上传文件大小超过预设限制的问题。这不仅影响用户体验,还可能导致应用程序出现异常或错误。本文将深入探讨如何解决...
限制文件大小同样是为了防止过大文件消耗过多服务器资源。除了在`struts.xml`中设置全局的最大上传大小外,还可以在Action中进行额外的验证: ```java if (file.length() > 1048576) { // 1MB addFieldError("file...
如果上传文件大小超过这个限制,Struts会抛出`MaxUploadSizeExceededException`异常。 2. Spring框架中的文件上传: Spring提供了`CommonsMultipartFile`类来处理文件上传,它是基于Apache Commons FileUpload库的...
这里我们启用了multipart/form-data类型的数据解析,并设置了最大上传文件大小为20MB。 接下来,创建一个Action类来处理文件上传请求。这个类需要继承自`org.apache.struts2.dispatcher.multipart....
默认情况下,这个拦截器可能会限制上传文件的类型为`.txt`,并且大小不超过10MB。这种限制是为了防止恶意用户上传大文件或者非文本文件,从而可能对服务器造成压力或引入安全风险。 配置文件`struts.xml`中关于文件...
在Struts2的配置文件中,我们可以定义这些规则,例如限制上传文件的大小,只接受特定类型的文件(如图片、文档等)。此外,我们还需要关注安全问题,防止恶意文件上传。 文件上传的实现通常包括以下几个步骤: 1. ...
同时,我们还需要配置`struts.multipart.saveDir`属性,指定临时文件保存的位置,以及`struts.multipart.maxSize`,限制上传文件的最大大小。 在视图层,通常会有一个HTML表单,使用`enctype="multipart/form-data...
4. **文件验证**:在处理文件上传时,通常需要对文件大小、类型等进行验证。这可以通过自定义拦截器或在Action类的方法中实现。 5. **文件存储**:上传的文件需要存储在服务器的某个位置。可以选择临时目录、特定的...
文件上传功能是Web应用中常见的需求,Struts2为此提供了完善的解决方案。在这个"struts2实现的文件上传(带文件类型和大小验证的)"示例中,我们将深入探讨如何在Struts2中实现这一功能。 首先,我们需要在Struts2...
3. **文件大小限制**:设定上传文件的大小上限,防止DoS攻击。 4. **权限控制**:确保只有授权用户可以访问上传的文件。 **五、优化与扩展** 为了进一步优化用户体验,可以考虑以下方面: 1. **错误处理**:提供...
Struts2是一个流行的Java Web框架,它为开发者提供了一种优雅的方式来构建可维护、可扩展且结构清晰的Web应用程序。...理解源码有助于你更好地掌握Struts2的工作原理,从而在遇到问题时能更高效地定位和解决。
7. **结果展示**:文件上传成功后,可以返回一个结果页面,显示上传成功的信息,或者提供上传文件的链接。这可以通过Struts2的`<s:property>`标签或者JSP的EL表达式实现。 8. **安全性**:在实际应用中,必须注意...