gpt4 book ai didi

java - 读取用Struts上传的文件

转载 作者:行者123 更新时间:2023-12-01 14:50:52 24 4
gpt4 key购买 nike

我尝试读取通过浏览上传的文件。为此,我使用 apache commons fileupload jar。因此,在使用项目应用程序运行它之前,我只需执行一个 servlet/jsp POC 项目即可成功读取文件。下面是代码,

protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {

boolean isMultipart = FileUpload.isMultipartContent(request);
String content = "";

try {
if (isMultipart) {
FileItemFactory factory = new DefaultFileItemFactory();
FileUploadBase upload = new FileUpload(factory);
String[] arr;
List items;

items = upload.parseRequest(request);

Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (!item.isFormField()) {
BufferedInputStream buff = new BufferedInputStream(
item.getInputStream());
byte[] bytes = new byte[buff.available()];
buff.read(bytes, 0, bytes.length);
content = new String(bytes);
arr = content.split(",");

}
}
}

request.getRequestDispatcher("success.jsp").forward(request,
response);
} catch (FileUploadException e) {

}

我使用了 jar 版本 1.1,因为我的项目目录有该版本的 jar 并且它使用 java 1.4。在 java 1.5 中,我们假设使用 ServletFileUpload 而不是 FileUpload 。但我想我可以在哪里使用早期版本的 jar 进行工作并不重要。

当我将它与使用 struts 1.1 的实际应用程序一起使用时,问题就出现了。一切看起来都很好,但我在解析请求时不返回项目。

items = upload.parseRequest(request);

此处的项目为空。

所以我能发现的区别是,成功显示结果的 POC 项目是一个 JSP/Servlet 项目,其中真正的应用程序使用 Struts。

在这种情况下,JSP/Servlet 和 Struts 项目中的请求会有所不同吗?

在这两种情况下,我都使用下面的表单。

<form action="SampleWeb" method="post" enctype="multipart/form-data">
<input type="file" name="datafile" size="40">
<input type="submit" value="Submit">

下面是struts应用程序中唯一添加的内容,

    <action
path="/ReportsAction"
type="come.test.ReportsAction"
name="ReportsForm"
scope="request"
validate="false"
parameter="dispatch">
<forward name="success" path="/reports/A.jsp"/>
<forward name="updatesuccess" path="/common/B.jsp"/>
</action>

最佳答案

请求就是请求。

但是,如果您使用 Struts 1,实际上使用 Struts 1。

表单,Java 端

使用 ActionFormFormFile 属性:

public class YourForm extends ActionForm {
private FormFile file; // Plus public getter/setter
// Etc.
}

您还可以执行诸如验证内容类型之类的操作:

public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
if (!"text/plain".equals(getFile().getContentType())) {
// etc.

表单,JSP 端

<html:form action="/uploadAction" method="post" enctype="multipart/form-data">
<html:file property="file" />
<!-- Etc... -->

行动

在此操作中,您应该将文件复制到其最终目的地(外部网络应用程序;使用配置参数来定义文件的最终位置)。考虑使用实用程序库来进行复制(或移动,也许有多种选择),而不是像某些教程中所示那样完成操作中的所有工作。

http://www.mkyong.com/struts/struts-file-upload-example/

不要在不同环境中盲目地使用相同的技术:这项工作是为您处理的。

此外,避免在新项目中使用 Struts 1。它相当古老,而且比 Struts 2 或 Spring MVC 等更现代的选项更难使用(而后者又比 Rails、Grails、Play 等更难使用)

关于java - 读取用Struts上传的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14871825/

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