Struts1上传下载教程:简单实现与注释详解
"在Struts1框架下实现图片上传下载功能的教程" 在这个Struts1的上传下载源代码示例中,我们将学习如何在一个简单的Action类中处理文件上传和下载操作。首先,我们导入了必要的Action、Form、Servlet和数据库连接相关的包。文件名为`FileAction`,继承自`DispatchAction`,这表明该Action可以分发到不同的处理方法,根据请求的不同类型进行处理。 `FileAction`类的主要方法是`upLoadFile`,它接受ActionMapping、ActionForm、HttpServletRequest和HttpServletResponse作为参数。在这里,我们首先将传入的ActionForm实例转换为`FileActionForm`,以便访问其中的文件对象(`FormFile file`)。 代码中使用`FormFile.getFile()`获取用户上传的文件,然后定义了一个变量`dir`,用于存储临时文件的存储路径,这个路径是在服务器的根目录下,如"D:\\loadfile\\temp\\"。接着,通过一个循环遍历文件名,找到文件扩展名(`.jpg`, `.png`, `.gif`等),并将之存储在`type`变量中。 `upLoadFile`方法的核心部分是对上传文件的操作。首先,创建一个`File`对象来存储上传的文件,然后检查文件是否已经存在于服务器上,如果不存在则将其保存到指定的目录。这通常涉及到创建一个新的目录结构,如果不存在则创建,以及将文件写入到新的文件系统位置。在实际操作中,这部分可能需要与数据库交互,记录文件的信息(例如文件名、上传时间等)。 对于下载功能,Struts1本身并不直接提供下载功能,但可以通过Action返回文件流,客户端浏览器会自动启动下载。具体实现时,需要从数据库或文件系统读取文件,设置合适的响应头(如Content-Disposition, Content-Type等),然后使用`response.getOutputStream()`方法将文件内容输出到HTTP响应。这部分代码没有直接给出,但可以推测在`FileAction`中会有一个相应的下载方法,接收请求参数并返回对应文件。 这个`FileAction`类展示了在Struts1中如何处理文件上传,包括文件名处理、临时存储和潜在的数据库记录操作。下载功能的实现则需要根据具体需求从数据库或文件系统获取文件,并设置正确的HTTP头来引导浏览器下载。这个示例代码对于初学者理解Struts1的文件上传机制非常有帮助,但在实际应用中可能需要根据项目需求进行调整和优化。
import org.apache.struts.action.*;
import javax.servlet.http.*;
import com.actionForm.FileActionForm;
import org.apache.struts.actions.DispatchAction;
import java.util.Date;
import java.text.*;
import org.apache.struts.upload.FormFile;
import java.io.*;
import java.net.URLEncoder;
import com.dao.*;
public class FileAction extends DispatchAction {
private JDBConnection connection =new JDBConnection();
//以下方法实现文件的上传
public ActionForward upLoadFile(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws
Exception {
ActionForward forward=null;
Date date = new Date();
FileActionForm fileActionForm = (FileActionForm) form;
//FormFile用于指定存取文件的类型
FormFile file = fileActionForm.getFile(); //获取当前的文件
// 获得系统的绝对路径 String dir = servlet.getServletContext().getRealPath("/image");
//我上传的文件没有放在服务器上。而是存在D:D:\\loadfile\\temp\\
String dir="D:\\loadfile\\temp\\";
int i = 0;
String type = file.getFileName();
//找到上传文件的类型的位置,这个地方的是'.'
i = type.indexOf(".");
/**//* System.out.println(i);*/
/**//*截取上传文件的后缀名,此时得到了文件的类型*/
type = type.substring(i+1);
}
// 限制上传类型为jpg,txt,rar;
if (!type.equals("jpg") && !type.equals("txt")&& !type.equals("bmp"))
{//当上传的类型不为上述类型时,跳转到错误页面。
forward=mapping.findForward("error");
}
else
{
// 将上传时间加入文件名(这个地方的是毫秒数)
String times = String.valueOf(date.getTime());
//组合成 time.type
String fname = times + "." + type;
//InInputStream是用以从特定的资源读取字节的方法。
InputStream streamIn = file.getInputStream(); //创建读取用户上传文件的对象
//得到是字节数,即byte,我们可以直接用file.getFileSize(),也可以在创建读取对象时用streamIn.available();
// int ok=streamIn.available();
int ok=file.getFileSize();
String strFee = null;
//这个地方是处理上传的为M单位计算时,下一个是以kb,在下一个是byte;
if(ok>=1024*1024)
{
float ok1=(((float)ok)/1024f/1024f);
剩余8页未读,继续阅读
- 粉丝: 81
- 资源: 7
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 批量文件重命名神器:HaoZipRename使用技巧
- 简洁注册登录界面设计与代码实现
- 掌握Python字符串处理与正则表达式技巧
- YOLOv5模块改进 - C3与RFAConv融合增强空间特征
- 基于EasyX的C语言打字小游戏开发教程
- 前端项目作业资源包:完整可复现的开发经验分享
- 三菱PLC与组态王实现加热炉温度智能控制
- 使用Go语言通过Consul实现Prometheus监控服务自动注册
- 深入解析Python进程与线程的并发机制
- 小波神经网络均衡算法:MATLAB仿真及信道模型对比
- PHP 8.3 中文版官方手册(CHM格式)
- SSM框架+Layuimini的酒店管理系统开发教程
- 基于SpringBoot和Vue的招聘平台完整设计与实现教程
- 移动商品推荐系统:APP设计与实现
- JAVA代码生成器:一站式后台系统快速搭建解决方案
- JSP驾校预约管理系统设计与SSM框架结合案例解析