接下来我将分享关于Java框架Struts2实现图片上传功能的完整攻略,包括两个示例。
1. 配置上传文件的目录
为了上传图片,我们需要在Struts2配置文件中定义一个上传目录。这可以在struts.xml
文件中的<constant>
标签中添加以下行完成:
<constant name="struts.multipart.saveDir" value="/upload" />
在这个例子中,将上传文件保存在Web应用程序目录下名为“upload”的目录中。
2. 添加表单
下一步,我们需要在JSP文件中添加一个表单来允许用户在该表单中选择文件并将其上传。以下是一个简单的示例:
<s:form action="upload" method="POST" enctype="multipart/form-data">
<s:file name="myFile" label="Choose a file" />
<s:submit />
</s:form>
在这个例子中,我们创建了一个Struts2表单,action
属性指向处理上传的操作。method
属性用于指定HTTP请求的方法为POST
。enctype
属性设置为multipart/form-data
,以指示向服务器上传二进制数据(文件)。
s:file
标签将创建一个文件上传表单元素,其中name
属性指定上传文件的参数名,label
属性用于显示上传文件的标签。
最后,我们使用s:submit
标签创建一个提交按钮,以允许用户上传文件。
3. 创建Action
在Struts2中,我们需要为文件上传创建一个Action。以下是一个简单的示例:
import com.opensymphony.xwork2.ActionSupport;
import java.io.File;
public class FileUploadAction extends ActionSupport {
private File myFile;
private String myFileContentType;
private String myFileFileName;
public String execute() {
//处理文件上传逻辑
return SUCCESS;
}
//getters和setters省略
}
在这个例子中,我们使用Struts2提供的ActionSupport
类作为Action的基础。我们还定义了三个属性,分别为上传文件、上传文件的类型和上传文件的名称。
execute()
方法将处理用户发送的文件并执行自定义逻辑。
4. 定义文件上传操作
在Action中处理文件上传操作。使用FileUtils
类从上传目录中读取文件并将其保存到新位置。
以下是一个简单的文件上传示例:
import org.apache.commons.io.FileUtils;
public class FileUploadAction extends ActionSupport {
private File myFile;
private String myFileContentType;
private String myFileFileName;
public String execute() {
try {
String filePath = servletRequest.getSession().getServletContext().getRealPath("/upload");
File fileToCreate = new File(filePath, this.myFileFileName);
FileUtils.copyFile(this.myFile, fileToCreate);
} catch (Exception e) {
e.printStackTrace();
addActionError(e.getMessage());
return INPUT;
}
return SUCCESS;
}
//getters和setters省略
}
在这个例子中,我们使用FileUtils
类在系统上创建了一个在配置目录中定义的新文件。
5. 示例
以下是一个完整的使用Struts2实现图片上传功能的示例:
struts.xml
配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.multipart.saveDir" value="/upload" />
<package name="default" extends="struts-default" namespace="/">
<action name="upload" class="com.example.FileUploadAction">
<result name="success">/success.jsp</result>
<result name="input">/index.jsp</result>
</action>
</package>
</struts>
index.jsp
文件
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Struts2 File Upload Example</title>
</head>
<body>
<h1>Struts2 File Upload Example</h1>
<s:form action="upload" method="POST" enctype="multipart/form-data">
<s:file name="myFile" label="Choose a file" />
<br/>
<s:submit/>
</s:form>
</body>
</html>
FileUploadAction
类文件
import org.apache.commons.io.FileUtils;
import com.opensymphony.xwork2.ActionSupport;
import java.io.File;
public class FileUploadAction extends ActionSupport {
private File myFile;
private String myFileContentType;
private String myFileFileName;
public String execute() {
try {
String filePath = servletRequest.getSession().getServletContext().getRealPath("/upload");
File fileToCreate = new File(filePath, this.myFileFileName);
FileUtils.copyFile(this.myFile, fileToCreate);
} catch (Exception e) {
e.printStackTrace();
addActionError(e.getMessage());
return INPUT;
}
return SUCCESS;
}
public File getMyFile() {
return myFile;
}
public void setMyFile(File myFile) {
this.myFile = myFile;
}
public String getMyFileContentType() {
return myFileContentType;
}
public void setMyFileContentType(String myFileContentType) {
this.myFileContentType = myFileContentType;
}
public String getMyFileFileName() {
return myFileFileName;
}
public void setMyFileFileName(String myFileFileName) {
this.myFileFileName = myFileFileName;
}
}
success.jsp
文件
<html>
<head>
<title>Struts2 File Upload - Success</title>
</head>
<body>
<h1>Struts2 File Upload - Success</h1>
<p>File Successfully Uploaded!</p>
<p>Uploaded File Name: <% out.print(request.getAttribute("myFileFileName")); %></p>
</body>
</html>
这个示例演示了如何上传一个单独的文件,但你可以调整此样本,以处理多个文件或文件大小的限制,以更适合你的需求。
希望这个完整的Struts2实现图片上传功能的攻略能够对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java框架Struts2实现图片上传功能 - Python技术站