实现struts2的文件上传功能

Struts2文件上传实现过程详解 通过以上配置和代码的实现,就可以在Struts2框架中实现文件上传功能。在文件上传过程中,Struts2会自动将上传的文件保存到临时目录中,并提供相应的属性来访问上传的文件信息。文件上传是Web开发中常见的功能之一,Struts2框架提供了方便的方法来实现文件上传功能。本文将详细介绍Struts2文件上传实现过程,包括配置文件的设置和代码的编写。在配置文件中,需要添加文件上传的拦截器配置以及相关的Action配置。是Struts2提供的文件上传拦截器,用于处理文件上传的请求。用于接收上传的文件, 阅读详情

1 struts2的文件上传

1.1 文件上传准备

1.1.1 页面配置

  • input为file类型
input type="file" name="upload"/>
  • 表单提交方式为post
  • enctypt为multipart/form-data
<FORM id=form1 name=form1
		action="${pageContext.request.contextPath }/customer_save.action"
		method=post enctype="multipart/form-data">

1.1.2 Action的配置

  • 需要有三个重要属性
    • private String uploadFileName // 命名要求:Jsp页面文件上传的name属性值+FileName
    • private File upload; // 命名要求:Jsp页面文件上传的name属性值
    • private String uploadContentType; // 命名要求:Jsp页面文件上传的name属性值+ContentType
  • 并分别为这三个属性添加set方法

1.1.3 代码实现

/**
 * 客户Action
 */
public class CustomerAction extends ActionSupport implements ModelDriven<Customer>
{
    private Customer customer=new Customer();
    
    private CustomerService customerService;
    
    /**
         * 文件名称:jsp页面文件上传的name属性的值+FileName
     */
    private String uploadFileName;
    /**
         * 上传文件:jsp页面文件上传的name属性的值
     */
    private File upload;
    /**
          * 文件类型:jsp页面文件上传的name属性的值+ContentType
     */
    private String uploadContentType;
    
    public void setUploadFileName(String uploadFileName)
    {
        this.uploadFileName = uploadFileName;
    }


    public void setUpload(File upload)
    {
        this.upload = upload;
    }


    public void setUploadContentType(String uploadContentType)
    {
        this.uploadContentType = uploadContentType;
    }

    public void setCustomerService(CustomerService customerService)
    {
        this.customerService = customerService;
    }
    
    public Customer getModel()
    {
        return customer;
    }
    
    /**
         * 添加客户
     * @throws IOException 
     */
    public String save() throws IOException {
        System.out.println(upload);
        if(upload!=null) {
            // 上传后存储的文件路径
            String path="D:\\Java\\WorkSpace\\uploadFile";
            // 由于文件可能非常多,可能导致同名,所以使用uuid作为文件名存储
            String fileName=FileUploadUtils.getUuidFileName(uploadFileName);
            // 由于文件可能过多,如果存储在同一目录下,会导致非常卡顿,所以分开存储
            String dirPath=FileUploadUtils.getFilePath(fileName);
            // 存储文件的目录
            String dir=path+dirPath;
            File fileDir=new File(dir);
            if(!fileDir.exists()) {
                // 目录不存在则创建
                fileDir.mkdirs();
            }
            // 存储文件
            File file=new File(fileDir,fileName);
            // 复制上传文件到存储文件
            FileUtil.copyFile(upload, file);
            // 存储图片路径
            customer.setCust_image(fileDir+"/"+fileName);
        }
        customerService.save(customer);
        return "saveSuccess";
    }
}

1.1.4 文件上传工具类

/**
 * 文件上传工具类
 */
public class FileUploadUtils
{
    /**
     * 获取uuid文件名
     * @Description: getUuidFileName
     */
    public static String getUuidFileName(String uploadFileName) {
        String uuid=uuid();
        if(uploadFileName!=null&& uploadFileName.indexOf(".")!=-1) {
            String suffix=uploadFileName.substring(uploadFileName.lastIndexOf("."));
            uuid=uuid+suffix;
        }
        return uuid;
    }
    
    /**
     * 通过文件名的hashCode获取8层目录结构,共16的8次方的目录,共43亿目录
     * @Description: getFilePath
     */
    public static String getFilePath(String uuidFileName) {
        int hashCode = uuidFileName.hashCode();
        int temp=hashCode;
        StringBuilder sb=new StringBuilder();
        for(int i=0;i<8;i++) {
            sb.append("/").append(temp & 0xf);
            temp=temp>>>1;
        }
        return sb.toString();
    }
    
    /**
     * 获取去处分割线的uuid值
     * @Description: uuid
     */
    public static String uuid() {
        String uuid=UUID.randomUUID().toString();
        return uuid.replace("-", "");
    }
}

1.1.5 设置文件上传大小和格式限制:struts2.xml配置

  • 注意当文件格式或大小不匹配的时候,会出现input错误,所以在action需要配置input
	<!-- 设置上传文件的临时存储路径 -->
	<!-- <constant name="struts.multipart.saveDir" value="d:/upload"/> -->
	<!-- 设置单次上传文件大小为5M -->
	<constant name="struts.multipart.maxSize" value="5242880"/>

	<action name="customer_*" class="customerAction" method="{1}">
			<result name="saveSuccess" type="redirectAction">customer_findAll.action</result>
			<result name="input">/jsp/customer/add.jsp</result>
			
			<interceptor-ref name="defaultStack">
				<!-- 设置单个文件最大大小 -->
				<param name="fileUpload.maximumSize">2097152</param>
				<!-- 设置上传文件类型 -->
				<param name="fileUpload.allowedExtensions">.jpg</param>
			</interceptor-ref>
		</action>
Struts 2 文件上传编程:实现文件上传功能的完整指南 Struts 2框架中,通过使用合适的配置和编程技巧,可以轻松地实现文件上传功能。请注意,上述代码示例中的文件保存路径和文件大小限制等细节是可以根据项目需求进行调整的。此外,为了确保安全性,建议对上传的文件进行适当的验证和过滤,以防止恶意文件上传和安全漏洞。在上述代码中,form元素的action属性指定了文件上传请求的处理URL。上述配置中,将"uploadFile"请求映射到FileUploadAction类,并根据执行结果返回相应的结果页面。上述配置中,将文件上传的最大大小设置为1MB。 阅读详情

相关推荐

基于Struts2实现文件上传与下载功能详解

对于大文件下载,直接加载整个文件流可能造成内存溢出或响应缓慢。通过HTTP协议的Range头,可以实现分段下载与断点续传。= -1) {// 不返回视图。

weixin_35238815的博客 672

开发者导航:Struts2学习笔记之:文件上传

Struts也提供了内置标签用于文件上传,我们称为文件选择域,这与html的标签是一样用的。

开发者导航 1180

基于Struts2文件上传功能实现与实战详解

Struts2中,要使Action能够接收上传的文件内容,必须遵循一套严格的字段命名规则。这种约定优于配置(Convention over Configuration)的设计理念,使得开发者无需额外配置即可实现自动绑定。其背后依赖的是Struts2对Apache Commons FileUpload组件返回结果的封装与值栈(ValueStack)的数据填充机制。除了使用默认的,还可通过继承该类来自定义预处理逻辑,如记录上传日志、动态调整大小限制或集成防病毒扫描。

weixin_30653091的博客 490

Struts2文件上传

文件上传的概述:文件上传是将本地文件上传到服务器的指定目录下。要使用Struts2进行文件上传,首先将form表单的enctype属性值设置为multipart/form-data。文件上传还需要

Keep Doing this的博客 1474

Struts2文件上传(全)

一、单文件上传 上传表单页面:select.jsp <%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html> <html> <head&g...

荒的博客 722

基于struts2实现文件上传功能

   在web开发应用中,文件上传是很多情形下必备的一项功能。本文详细介绍如何通过struts2实现一个简单的文件上传功能。 首先了解几个术语:      MIME类型:设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。是描述消息内容类型的因特网标准。 MIME 消息能包含文本、图像、音频、视频以及其他应用程序专用的数据。Tomcat的安装目录/conf/web.xml 中就定义了大量MIME类型。       拦截器:是Struts 2的一

黄刚的博客 5163

struts2实现文件上传功能

使用struts2实现文件上传功能,自带的commons-fileupload-1.3.1.jar可以轻松实现文件的上传功能,但是有个问题,如果文件大小远大于初始设置的文件大小值之后,上传就会出现如下图的问题,不知道哪位会处理这种异常,我搞了好几天,就是做不到啊。。。 第一步导包: 第二步,编写静态页面,添加文件上传项 Insert title here enc

mixturer的博客 671

struts2实现文件上传与下载功能

一、Demo介绍基于struts2框架,实现多文件的上传和下载功能实现原理图: 部分界面图: 上传成功及下载页面: 二、主要代码uploadFile.jsp:在form表单中包含一个文本框(上传用户的姓名)和两个文件上传选项.<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncodi

amateur_RD的博客 877

struts2实现文件上传功能

在web项目中,文件上传、头像上传这样的功能经常是要用到的,下面就以在struts2实现文件上传功能为例子,简单地理一下文件上传功能的编码思路。 项目目录结构 项目源代码 web.xml <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="

光华小丸子 1955

struts2 实现简单的文件上传、下载功能

struts2 实现简单的文件上传、下载功能

肆尾葱的博客 557

java struts2上传文件_java Struts2框架下实现文件上传功能

本文实例为大家分享了Struts2框架实现文件上传的方法,供大家参考,具体内容如下struts2的配置过程(1)在项目中加入jar包(2)web.xml中filter(过滤器)的配置xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocat...

weixin_36448964的博客 230

java struts2 excel上传_java中struts2实现文件上传下载功能实例解析

本文实例讲述了java中struts2实现文件上传下载功能实现方法。分享给大家供大家参考。具体分析如下:1.文件上传首先是jsp页面的代码在jsp页面中定义一个上传标签附件:然后是BaseAction中定义的相关属性其它的就省略了(也可定义在自己的Action,换下访问修饰符即可)/***Action基类**/public class BaseAction extends ActionSuppo...

weixin_42554394的博客 327

Struts2+Android (2) 实现信息,文件上传功能

继续中午的话题,中午实现了获取WebService今晚是上传文件 本工程也实现了上传文字(废话)可以直接在服务器控制台打印出来 还是第一篇的http://blog.csdn.net/sfshine/article/details/7564328工程 struts增加一个action <!DOCTYPE struts PUBLIC "-//Apache Soft

梦想无论怎样模糊,总潜伏在我们心底,使我们的心境永远得不到安宁. 1888

struts2实现文件上传下载功能

struts2实现文件的上传下载,一些关键代码我都有解释,这里只实现,没有对功能做进一步升级。 使用到的工具: IDE:IDEA javaIDK 1.8 构建工具:gradle 服务器:tomcat9 此次内容使用到的基本环境自己去配,代码部分,不论你用任何工具,或者技术,都是殊途同归的,下面直接上代码: 单文件上传: fileUpload.jsp: // 单文件上传的jsp <%@ tag...

qq_39195079的博客 332

struts2 实现文件上传功能

[code="java"] package tutorial; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStr...

iteye_18190的博客 101

Struts2实现文件上传功能

1、首先得配置一下Struts得配置文件struts-xml: 1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE struts PUBLIC 3 "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" 4 ...

weixin_30586085的博客 72

【SSI开发总结.8】Struts2实现文件上传功能

 1.编写上传表单...............................................................1.编写Actionpackage action.game.editor.windows;import com.opensymphony.xwork2.ActionSupport;import org.a

溺水的鱼 - Later equals never. 2075

【SSH网上商城项目实战13】Struts2实现文件上传功能

        上一节我们做完了添加和更新商品的功能,这两个部分里有涉及到商品图片的上传,并没有详细解说。为此,这篇文章详细介绍一下Struts2实现文件上传功能。 1. 封装文件信息         我们首先得有一个Model来封装文件的信息,这个Model里需要有三个属性:文件、文件类型和文件名。针对我们要传的图片,我们新建一个Model如下:   public class Fil...

1万+
上一篇: Spring事务理解和配置
下一篇: Hibernat的通用BaseDao
Student108
博客等级 码龄8年 15粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值