SSH开发中的文件上传

文件上传的要素

  • 表单提交方式必须是POST
  • 表单的enctype属性:必须设置为multipart/form-data
  • 表单必须有文件上传项:file

表单


<form id=form1 name=form1 action="${pageContext.request.contextPath }/image_save.action" method=post enctype="multipart/form-data">
	<input type="file" name="upload">
	<input class=button id=sButton2 type=submit value="保存" name=sButton2>
<form>

上传中会出现的问题和解办法

  • 如果文件重名发生覆盖问题
  • 同目录下文件/目录过多,性能问题
    • 在images下最多创建16个目录,任意一个目录进入之后最多创建16个目录,最多创建8层目录
  • 编写工具类
public class UploadUtils {
	
	/*
	 * 解决目录下文件名重复的问题
	 */
	public static String getUuidFileName(String filename){
		
		int idx = filename.lastIndexOf(".");				//找到文件名中 . 所在的位置
		String entions = filename.substring(idx);		//获得文件扩展名
		String ufilename = UUID.randomUUID().toString().replace("-", "")+entions;
		return ufilename;
	}
		
	/*
	 * 目录分离
	 */ 
	public static String getPath(String uuidFilename){
		int code1 = uuidFilename.hashCode();
		int d1 = code1 & 0xf;					//作为一级目录
		int code2 = code1 >>> 4;			//右移4位
		int d2 = code2 & 0xf;					//作为二级目录
		return "/"+d1+"/"+d2;
		//进行相同代码操作,可以一直分离下去
	}
}

imageAction.class的编写

public class imageAction{
	public void image_save(){
		//上传图片
		if(upload != null){
			//文件的上传:
			//设置文件上传的路径
			String path ="C:/upload";
			//一个目录下存放相同的文件名:产生随机文件名
			String uuidFilename =UploadUtils.getUuidFileName(uploadFileName);
			//一个目录下存文件太多:对文件目录进行分离
			String realPath = UploadUtils.getPath(uuidFilename);
			//创建目录:
			String url = path+realPath;
			File file = new File(url);
			if(!file.exists()){
				file.mkdirs();
			}
			//文件上传
			File dictFile = new File(url+"/"+uuidFilename);
			FileUtils.copyFile(upload, dictFile);
			
			//设置image属性的值
			customer.setCust_image(url+"/"+uuidFilename);
		}
	}
}

在struts配置文件中进行配置

<package name="imagetest" extends="struts-default" namespace="/">
	<action name="image_*" class="imageAction" method="{1}">
	</action>
</package>

struts文件上传的注意事项

  • struts中对上传文件的大小进行的初始设置
struts.multipart.maxSize=20697152
  • 如果想改变大小,需要在struts的配置文件中进行修改
    • 这个的修改的是表单中上传的文件的总大小,如果想要规定单个文件大小,需要使用拦截器
<!-- 配置Struts2表单中上传的文件的总大小 -->
<constant name="struts.multipart.maxSize" value="需要的大小"></constant>
  • 设置单个文件的大小
<interceptor-ref name="defaultStack">
	<param name="fileUpload.maximumSize">所需要设置的单个文件大小</param>
	<param name="fileUpload.allowedExtensions">允许上传的文件类型</param>
</interceptor-ref>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值