1、整合MVC实现文件上传
整合MVC实现文件上传
在实际的开发中在实现文件上传的同时肯定还有其他信息需要保存到数据库,文件上传完毕之后需要将提交的基本信息插入数据库,那么我们来实现这个操作。
整个MVC实现文件上传
1、拷贝之前的dao层和service
2、开发控制层(Controller)
3、调整dao层的父类(BaseController)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<base href="/mvcPro/">
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="testupload/regist" method="post" enctype="multipart/form-data">
<fieldset>
<legend>请注册</legend>
name:<input type="text" name="ename" value="king"><br><br>
sal:<input type="text" name="sal" value="9999.00"><br><br>
job:<input type="text" name="job" value="manager"><br><br>
comm:<input type="text" name="comm" value="3000.00"><br><br>
deptno:<input type="text" name="deptno" value="10"><br><br>
照&nbsp;&nbsp;&nbsp;片:<input type="file" name="pic"><br><br>
<input type="submit" value="提交"><br><br>
<input type="reset" value="重置">
</fieldset>
</form> </body>
</html>
package cn.sxt.mvcpro.controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import cn.sxt.mvcpro.service.IEmpService;
import cn.sxt.mvcpro.service.impl.EmpServiceImpl;
import cn.sxt.mvcpro.servicefactory.ServiceFactory;
import cn.sxt.mvcpro.vo.Emp; @SuppressWarnings("serial")
@WebServlet("/testupload/*")
public class TestUpload extends BaseServlet{
@SuppressWarnings("static-access")
IEmpService proxy = (IEmpService) new ServiceFactory().getInstance(EmpServiceImpl.class);
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String pathInfo = req.getPathInfo();
if ("/regist".equals(pathInfo)) {
this.regist(req,resp);
}
}
private void regist(HttpServletRequest req, HttpServletResponse resp) {
// System.out.println(req.getParameter("username"));
saveFile(req, resp);
Emp emp = initObj(req, Emp.class);
System.out.println(emp);
System.out.println(proxy.addEmp(emp));
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
@Override
public String getDir() {
return "empImg/";
}
}
package cn.sxt.mvcpro.controller;

import java.io.File;
import java.io.IOException;
import java.lang.reflect.Field;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.UUID; import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import com.jspsmart.upload.SmartUpload;
import com.jspsmart.upload.SmartUploadException; @SuppressWarnings("serial")
public abstract class BaseServlet extends HttpServlet {
SmartUpload smart = null;
String newFileName = null; public void saveFile(HttpServletRequest req, HttpServletResponse resp) {
try {
// 1.实例化上传的工具对象(jspSmartUpload.jar)
smart = new SmartUpload();
// 2.取得config内置对象
ServletConfig config = this.getServletConfig();
// 3.初始化smart
smart.initialize(config, req, resp);
// 4.设置相关参数
smart.setAllowedFilesList("jpg,png,gif");
// smart.setDeniedFilesList("mp4");
smart.setMaxFileSize(1024 * 1024 * 1024 * 3);
smart.setTotalMaxFileSize(1024 * 1024 * 1024 * 3 * 10);
// 5.实现上传(将文件放到内存,还没有到 磁盘)
smart.upload();
// 6.取得项目部署路径
String savePath = req.getServletContext().getRealPath("/"+this.getDir());
System.out.println(savePath);
File file = new File(savePath);
if (!file.exists()) {
file.mkdirs();
}
// 按照文件的原名保存--》 smart.save(savePath);
// 7.为文件重命名保存(避免覆盖)
String ext = smart.getFiles().getFile(0).getFileExt();// 取得文件扩展名
System.out.println(smart.getFiles());
System.out.println(smart.getFiles().getFile(0));
System.out.println(smart.getFiles().getFile(0).getFileExt());
newFileName = UUID.randomUUID() + "." + ext;
smart.getFiles().getFile(0).saveAs(savePath + newFileName.replaceAll("-", ""));
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (SmartUploadException e) {
e.printStackTrace();
} } public <T> T initObj(HttpServletRequest req, Class<T> clz) {
T t = null;
try {
t = clz.newInstance();
Field[] fields = clz.getDeclaredFields();
for (Field f : fields) {
f.setAccessible(true);
String fname = f.getName();
// System.out.println(fname + "================");
String fvalue = null;
if (this.smart == null) {
fvalue = req.getParameter(fname);
// System.out.println(fvalue + ">>>>>>>>>>>>");
} else {
fvalue = smart.getRequest().getParameter(fname);
// System.out.println(fvalue + "<<<<<<<<<<<<<<<");
}
if (fvalue == null) {
continue;
}
if ("Double".equals(f.getType().getSimpleName())) {
f.set(t, Double.valueOf(fvalue));
} else if ("Integer".equals(f.getType().getSimpleName())) {
f.set(t, Integer.valueOf(fvalue));
} else if ("Date".equals(f.getType().getSimpleName())) {
try {
f.set(t, new SimpleDateFormat("yyyy-MM-dd").parse(fvalue));
} catch (IllegalArgumentException | ParseException e) {
e.printStackTrace();
}
} else {
f.set(t, fvalue);
}
}
} catch (InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
return t;
} // 定义一个抽象方法 子类必须实现(文件夹的名称交给子类决定)
public abstract String getDir();
}

整合MVC实现文件上传的更多相关文章

  1. Spring MVC实现文件上传

    基础准备: Spring MVC为文件上传提供了直接支持,这种支持来自于MultipartResolver.Spring使用Jakarta Commons FileUpload技术实现了一个Multi ...

  2. MVC之文件上传1

    MVC之文件上传 前言 这一节我们来讲讲在MVC中如何进行文件的上传,我们逐步深入,一起来看看. Upload File(一) 我们在默认创建的项目中的Home控制器下添加如下: public Act ...

  3. Asp.net mvc 大文件上传 断点续传

    Asp.net mvc 大文件上传 断点续传 进度条   概述 项目中需要一个上传200M-500M的文件大小的功能,需要断点续传.上传性能稳定.突破asp.net上传限制.一开始看到51CTO上的这 ...

  4. Spring MVC的文件上传

    1.文件上传 文件上传是项目开发中常用的功能.为了能上传文件,必须将表单的method设置为POST,并将enctype设置为multipart/form-data.只有在这种情况下,浏览器才会把用户 ...

  5. Spring MVC的文件上传和下载

    简介: Spring MVC为文件上传提供了直接的支持,这种支持使用即插即用的MultipartResolver实现的.Spring MVC 使用Apache Commons FileUpload技术 ...

  6. 【Spring学习笔记-MVC-13】Spring MVC之文件上传

    作者:ssslinppp       1. 摘要 Spring MVC为文件上传提供了最直接的支持,这种支持是通过即插即用的MultipartResolve实现的.Spring使用Jakarta Co ...

  7. MVC图片上传、浏览、删除 ASP.NET MVC之文件上传【一】(八) ASP.NET MVC 图片上传到服务器

    MVC图片上传.浏览.删除   1.存储配置信息 在web.config中,添加配置信息节点 <appSettings> <add key="UploadPath" ...

  8. spring mvc ajaxfileupload文件上传返回json下载问题

    问题:使用spring mvc ajaxfileupload 文件上传在ie8下会提示json下载问题 解决方案如下: 服务器代码: @RequestMapping(value = "/ad ...

  9. 0062 Spring MVC的文件上传与下载--MultipartFile--ResponseEntity

    文件上传功能在网页中见的太多了,比如上传照片作为头像.上传Excel文档导入数据等 先写个上传文件的html <!DOCTYPE html> <html> <head&g ...

随机推荐

  1. SQL注入学习(一)

    注入攻击的本质:web应用程序没有过滤用户输入或过滤不严谨,直接把用户输入的恶意数据当做代码执行 两个条件: 1.用户能够控制输入 2.原本程序要执行的代码,拼接了用户输入的数据 注入类型 SQL注入 ...

  2. Linux第十节课学习笔记

    部署LVM三步: 1.pv:使设备支持LVM: 2.vg:对支持LVM的设备进行整合: 3.lv:将整合的空间进行切割. 每个基本单元PE的大小为4M,分配空间必须是4M的整数倍.可以容量或基本单元个 ...

  3. 【转】rem自适应布局

    rem自适应原理 rem是根据html的font-size大小来变化,正是基于这个出发,我们可以在每一个设备下根据设备的宽度设置对应的html字号,从而实现了自适应布局.更多介绍请看这篇文章:rem是 ...

  4. c++——大端序,小端序的排列问题

    #include<iostream> using namespace std; union TestModel { int i; char ch; }; int main() { unio ...

  5. Yii2 设计模式——设计模式简介

    我们首先来思考一个问题:作为工程师,我们的价值是什么? 笔者认为是——解决用户问题. 我们的任何知识和技能,如果不能解决特定的问题,那么就是无用的屠龙之术:我们的任何经验,如果不能对解决新的问题有用, ...

  6. 剑指offer 12.代码的完整性 数值的整数次方

    题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方.   本人渣渣代码: public double Power(double ba ...

  7. rocketmq 4.3.2 解决远程不能消费问题,解决未识别到公网IP问题

    1.解决远程不能消费问题 问题描述: nameserver和broker启动后,用tools(命令如下)能发送消息和消费消息,在局域网服务器能发送消息,消费启动后收不到消息通知问题 sh tools. ...

  8. [ZZ] 边缘检测 梯度与Roberts、Prewitt、Sobel、Lapacian算子

    http://blog.csdn.net/swj110119/article/details/51777422 一.学习心得: 学习图像处理的过程中,刚开始遇到图像梯度和一些算子的概念,这两者到底是什 ...

  9. listener.starting()源码探究

    容器启动时,监听器调用starting方法,本质是找到匹配的监听器,广播事件,开始监听 上节对寻找匹配监听器做了分析,其是这个过程比较重要的部分,本文开始监听,反而不是那么复杂,如下: 找匹配监听器就 ...

  10. ajax(读取json数据)

    ajax知识点: 语法:$.ajax(路由,请求方式,返回的数据类型,数据参数,回调函数) url: "路由", type:"",默认get请求(get或pos ...