SSH,SSM框架文件上传
一、了解文件上传
1.1 什么是文件上传
将本地文件通过流的形式写到服务器上
1.2 文件上传的技术
- JspSmartUpload: 其组件是应用jsp进行B/S程序开发过程中经常使用的上传文件组件,支持中文文件名文件
- Fileupload组件(经常):是Apache commons下面的子项目,用来实现java环境下面的文件上传功能
- Servlet3.0支持:
文件上传
注解开发
异步请求
- Struts2框架:底层实现了fileupload,对fileupload进行了封装。
- SpringMvc框架:底层也实现了文件的上传
1.3 文件上传要素
- 表单的提交方式必须是Post
- 表单中需要提供<input type=”file”>这个文件项必须有name属性值
- 表单的enctype属性必须设置为multipart/form-data
2 文件上传代码实现
2.1 修改jsp页面
- 提供文件上传项

2.2 修改表单的enctype属性:

3. 目录分离算法分析:

二、SSH中struts2的文件上传;
1. action 里面的设置:
@Controller
@Scope("prototype")
public class CustomerAction extends ActionSupport implements ModelDriven<Customer>{
@Autowired
private CustomerService customerService;
// 模型驱动使用的对象
private Customer customer = new Customer();/**
* 文件上传提供的三个属性,需要添加set方法,这三个属性必须要有属性驱动注入
*/
private String uploadFileName;//接收文件上传的名称
private File upload;//要上传的文件,这个名称要跟jsp页面的文件上传组件的name属性值一样
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;
}
@Override
public Customer getModel() {
return customer;
}/**
* 保存客户信息
* <p>Title: CustomerAction</p>
* <p>Description: </p>
* @return
* @throws IOException
*/
public String saveCustomer() throws IOException {
//上传文件:
if(upload != null) {
//设置文件上传路径
String path = "C:/upload";
//一个目录下存放的相同文件名:随机文件名
String uuidFileName = UploadUtils.getUUIDFleName(uploadFileName);
//一个目录下存放的文件过多:目录分离
String realPath = UploadUtils.getPathByHash(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);
}
customerService.saveCustomer(customer);
return NONE;
}
}
2. 编写文件目录工具类
package com.sshcrm.utils; import java.text.SimpleDateFormat;
import java.util.Date; /**
* 文件上传工具类
* <p>
* Title: UploadUtils.java
* </p>
* <p>
* Description:
* </p>
* <p>
* Company: WSJT
* </p>
*
* @author 王亚强
* @date 2018年7月26日
*
*/
public class UploadUtils {
public static String getUUIDFleName(String fileName) {
// 获取唯一的文件名加上扩展名
String extions = fileName.substring(fileName.lastIndexOf("."));
String uuidFileName = IdGenertor.genGUID() + extions;
return uuidFileName;
} // 目录分离法来获取目录
public static String getPathByHash(String uuidFileName) {
// 目录分离
int code1 = uuidFileName.hashCode();
int d1 = code1 & 0xf;// 作为一级目录
int code2 = code1 >>> 4;// 右移4位
int d2 = code2 & 0xf;// 作为二级目录 0x代表16进制
return "/" + d1 + "/" + d2;
} // 日期目录分离法
public static String getPathByDate() {
// 目录分离
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("/yyyy/MM/dd");
String timePath = simpleDateFormat.format(date);
return timePath;
}
}
package com.sshcrm.utils; import java.math.BigInteger; import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
import java.util.UUID;
/**
* 获取GUID和UUID
* @author Mike
*
*/
public class IdGenertor {
private static UUID uuid=null;
private static final Random RANDOM=new Random();
//获取UUID
public static String getUUID() {
uuid = UUID.randomUUID();
String idstr = uuid.toString().replace("-", "");
return idstr.toUpperCase();
}
//获取GUID
public static String genGUID(){
return new BigInteger(165, RANDOM).toString(36).toUpperCase();
} public static String genOrdernum(){
Date now = new Date();
DateFormat df = new SimpleDateFormat("yyyyMMdd");
String s1 = df.format(now);// 20141026+纳秒
return s1+System.nanoTime();
}
}
3.struts设置文件上传限定:workflow是struts最后一个拦截器,如果其中拦截器没有通过并且没有设置input视图就会跳转到没有视图的页面

4. 配置好在跳转页面回显错误信息

三、SSM框架springMVC文件上传:
1. 需要在Controller方法参数类添加MutipartFile uploadFile;注意uploadFile要与jsp页面的属性名字一样
@RequestMapping(value="/pic/upload",produces=MediaType.TEXT_PLAIN_VALUE + ";charset=utf-8")
@ResponseBody
public String pictureUpload(MultipartFile uploadFile){
Map<String, Object> result = pictureService.uploadPicture(uploadFile);
//为了保证功能的兼容性,需要把Result转化为json格式的字符串
String json = JsonUtils.objectToJson(result);
return json;
}
2. pictureService代码:
@Override
public Map uploadPicture(MultipartFile uploadFile){
Map<String,Object> resultMap = new HashMap<>();
try {
//生成一个新的文件名
//取原始文件名
String oldFileName = uploadFile.getOriginalFilename();
//生成新文件名
//设置文件上传路径
String path = "C:/upload";
//一个目录下存放的相同文件名:随机文件名
String uuidFileName = UploadUtils.getUUIDFleName(uploadFileName);
//一个目录下存放的文件过多:目录分离
String realPath = UploadUtils.getPathByHash(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);
resultMap.put("error", 0);
resultMap.put("url",url + "/" + uuidFileName);
return resultMap;
} catch (IOException e) {
resultMap.put("error", 1);
resultMap.put("message", "文件上传发送异常");
return resultMap;
}
}
SSH,SSM框架文件上传的更多相关文章
- 文件上传—SSM框架文件上传
1.准备上传下载的api组件 <dependency> <groupId>commons-io</groupId> <artifactId>common ...
- ssm框架文件上传
有两种方法 导包和上传配置自己搞: 第一种: 上传单个文件: @RequestMapping("/addfile1") public String addfile(@Request ...
- ssh框架文件上传下载
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 第二百七十三节,Tornado框架-文件上传
Tornado框架-文件上传 第一.普通表单上传文件 self.request.files["fafafa"] 获取上传文件信息,参数["上传文件框的name名称&quo ...
- tp框架-----文件上传
之前也做过文件上传,现在学了tp,用tp怎么做呢? 第一步:做一个Wenjian控制器: <?php namespace Ceshi\Controller; use Think\Controll ...
- tp 框架 -文件上传
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 <?ph ...
- SSM实现文件上传
1.导入上传需要的jar包 commons-fileupload-1.3.3.jar commons-io-2.6.jar 2.创建 index.jsp <%@ page contentType ...
- 文件上传—SSH框架文件上传
1.准备上传的api组件 <dependency> <groupId>commons-io</groupId> <artifactId>commons- ...
- Android采取async框架文件上传
页面效果 须要的权限 <uses-permission android:name="android.permission.INTERNET"/> 网络訪问权限; 布局文 ...
随机推荐
- C - Maximum of Maximums of Minimums(数学)
C - Maximum of Maximums of Minimums You are given an array a1, a2, ..., an consisting of n integers, ...
- OCP考试最新052题库分析整理-28
28.Which two are true about external tables? A. They support the ORACLE_DATAPUMP access driver. B. T ...
- 在一个项目里,公共一个css、各个页面分别对应不同的css?
是部分公用才对.比如所有页面的头部脚部一般是一样的,就放在一个公用css里如common.css,每个页面都要链接这个css.不一样的部分单独写一个,如主页就做一个index.,css,列表页就写一个 ...
- Linux系统如何迁移至LVM磁盘
今天遇到一个问题,算是比较严重的把.就是要把当前系统转移到 LVM 卷里面去,下面有一些发生过程介绍. 不感兴趣可以直接跳过,看实战部分<如何迁移系统至LVM卷> 朋友今天突然找我,说是要 ...
- 各种 Python 库/模块/工具
1 算法 1.1 字符串处理 re 正则表达式的标准库. StringIO / cStringIO 以读写文件的方式来操作字符串(有点类似于内存文件). cStringIO 是 C 语言实现的,提供高 ...
- [web]深入理解Session和Cookie
一.理解Cookie 由于http是一种无状态的协议,当用户的一次访问结束后,后端的服务器就无法知道下一次来访问的请求是不是上一次的用户了.那么Cookie的作用就是用户通过http访问一个服务器时, ...
- 面试笔试(C++部分)
1.define 和const,inline的区别 define的缺点: 1.边界效应(必须加括号,才能避免边界效应) #define MUL(A,B) A*B 而在使用的时候,这样的调用: ,b=, ...
- 使用Avd 调试慢的解决方案
AVD 太慢了,不仅启动,而且运行慢.以致于要用手机去调.你觉得这样方便吗? 如果没有一个简单快速的开发调试环境,把时间都浪费在启动,调试及等待上,那是对生命的浪费. 必要条件: ...
- sql 列集合
STUFF((SELECT ','+CAST( TYZ_Bh as varchar(10)) FROM #1 where 片区划分='江东' for xml path('')),1,1,'')
- ps(1)
1,让图片放大放小不变:把图层转化为智能对象:去掉:智能对象栅格化 2.ctrl+u 快捷----->色相饱和度,(1)色相:调整颜色的冷暖:(2)饱和度:图片颜色的饱和,(3)明度:照片颜色从 ...