mvc附件上传
‘壹’ 求SpringMVC大文件上传详解及实例代码
SpringMVC的文件上传非常简便,首先导入文件上传依赖的jar:
<!-- 文件上传所依赖的jar包 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
 
在springMVC-servlet.xml配置文件中配置文件解析器:
<!--1*1024*1024即1M resolveLazily属性启用是为了推迟文件解析,以便捕获文件大小异常 -->
<!--文件上传解析器-->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="1048576"/>
<property name="defaultEncoding" value="UTF-8"/>
<property name="resolveLazily" value="true"/>
</bean>
注意解析器的id必须等于multipartResolver,否则上传会出现异常
import org.apache.commons.io.FileUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import java.io.File;
@Controller
public class FileController {
/**
* 上传单个文件操作
* MultipartFile file就是上传的文件
* @return
*/
@RequestMapping(value = "/upload1.html")
public String fileUpload1(@RequestParam("file") MultipartFile file) {
try {
//将上传的文件存在E:/upload/下
FileUtils.InputStreamToFile(file.getInputStream(),                           new File("E:/upload/",
file.getOriginalFilename()));
} catch (Exception e) {
e.printStackTrace();
}
//上传成功返回原来页面
return "/file.jsp";
}}
上传文件时,Controller的方法中参数类型是MultipartFile即可将文件映射到参数上。
页面:
file.jsp:
<form method="post" action="/upload1.html" enctype="multipart/form-data">
<input type="file" name="file"/>
<button type="submit" >提交</button>
</form>
‘贰’ springmvc怎么上传文件
spring mvc(注解)上传文件的简单例子,这有几个需要注意的地方
1.form的enctype=”multipart/form-data” 这个是上传文件必须的
2.applicationContext.xml中 <bean id=”multipartResolver” class=”org.springframework.web.multipart.commons.CommonsMultipartResolver”/> 关于文件上传的配置不能少
大家可以看具体代码如下:
web.xml
[html] view plain 
<?xml version="1.0" encoding="UTF-8"?>  
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">  
<display-name>webtest</display-name>  
<listener>  
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
</listener>  
<context-param>  
<param-name>contextConfigLocation</param-name>  
<param-value>  
/WEB-INF/config/applicationContext.xml  
/WEB-INF/config/codeifAction.xml  
</param-value>  
</context-param>  
<servlet>  
<servlet-name>dispatcherServlet</servlet-name>  
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
<init-param>  
<param-name>contextConfigLocation</param-name>  
<param-value>/WEB-INF/config/codeifAction.xml</param-value>  
</init-param>  
<load-on-startup>1</load-on-startup>  
</servlet>  
<!-- 拦截所有以do结尾的请求 -->  
<servlet-mapping>  
<servlet-name>dispatcherServlet</servlet-name>  
<url-pattern>*.do</url-pattern>  
</servlet-mapping>  
<welcome-file-list>  
<welcome-file>index.do</welcome-file>  
</welcome-file-list>  
</web-app>  
applicationContext.xml
[html] view plain 
<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"  
xmlns:context="http://www.springframework.org/schema/context"  
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"  
default-lazy-init="true">  
<!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->  
<bean class="org.springframework.web.servlet.mvc.annotation." lazy-init="false" />  
<!-- 另外最好还要加入,不然会被 XML或其它的映射覆盖! -->  
<bean class="org.springframework.web.servlet.mvc.annotation." />  
<!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 -->  
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" />  
<!-- 支持上传文件 -->  
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>  
</beans>  
codeifAction.xml
[html] view plain 
<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"  
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"  
default-lazy-init="true">  
<bean id="uploadAction" class="com.codeif.action.UploadAction" />  
</beans>  
UploadAction.java
[java] view plain 
package com.codeif.action;  
import java.io.File;  
import java.util.Date;  
import javax.servlet.http.HttpServletRequest;  
import org.springframework.stereotype.Controller;  
import org.springframework.ui.ModelMap;  
import org.springframework.web.bind.annotation.RequestMapping;  
import org.springframework.web.bind.annotation.RequestParam;  
import org.springframework.web.multipart.MultipartFile;  
@Controller  
public class UploadAction {  
@RequestMapping(value = "/upload.do")  
public String upload(@RequestParam(value = "file", required = false) MultipartFile file, HttpServletRequest request, ModelMap model) {  
System.out.println("开始");  
String path = request.getSession().getServletContext().getRealPath("upload");  
String fileName = file.getOriginalFilename();  
//        String fileName = new Date().getTime()+".jpg";  
System.out.println(path);  
File targetFile = new File(path, fileName);  
if(!targetFile.exists()){  
targetFile.mkdirs();  
}  
//保存  
try {  
file.transferTo(targetFile);  
} catch (Exception e) {  
e.printStackTrace();  
}  
model.addAttribute("fileUrl", request.getContextPath()+"/upload/"+fileName);  
return "result";  
}  
}  
index.jsp
[html] view plain 
<%@ page pageEncoding="utf-8"%>  
<!DOCTYPE html>  
<html>  
<head>  
<meta charset="utf-8">  
<title>上传图片</title>  
</head>  
<body>  
<form action="upload.do" method="post" enctype="multipart/form-data">  
<input type="file" name="file" /> <input type="submit" value="Submit" /></form>  
</body>  
</html>  
WEB-INF/jsp/下的result.jsp
[html] view plain 
<%@ page pageEncoding="utf-8"%>  
<!DOCTYPE html>  
<html>  
<head>  
<meta charset="utf-8">  
<title>上传结果</title>  
</head>  
<body>  
<img alt="" src="${fileUrl }" />  
</body>  
</html>
‘叁’ spring mvc word文件上传功能
springmvc文件上传
1.加入jar包:
commons-fileupload-1.2.2.jar
commons-io-2.0.1.jar
lperson.java中加属性,实现get ,set方法
private String photoPath;
2.创建WebRoot/upload目录,存放上传的文件
1 <sf:form id="p" action="saveOrUpdate" 
2 method="post" 
3 modelAttribute="person" 
4 enctype="multipart/form-data">
5 
6 <sf:hidden path="id"/> 
7 name: <sf:input path="name"/><br>
8 age: <sf:input path="age"/><br>
9 photo: <input type="file" name="photo"/><br>
上面第9行文件上传框,不能和实体对象属性同名,类型不同
controller配置
1 12、文件上传功能实现 配置文件上传解析器
2 @RequestMapping(value={"/saveOrUpdate"},method=RequestMethod.POST)
3 public String saveOrUpdate(Person p,
4 @RequestParam("photo") MultipartFile file,
5 HttpServletRequest request
6 ) throws IOException{
7 if(!file.isEmpty()){
8 ServletContext sc = request.getSession().getServletContext();
9 String dir = sc.getRealPath(“/upload”); //设定文件保存的目录
10 
11 String filename = file.getOriginalFilename(); //得到上传时的文件名
12 FileUtils.writeByteArrayToFile(new File(dir,filename), file.getBytes());
13 
14 p.setPhotoPath(“/upload/”+filename); //设置图片所在路径
15 
16 System.out.println("upload over. "+ filename);
17 } 
18 ps.saveOrUpdate(p); 
19 return "redirect:/person/list.action"; //重定向
20 }
3.文件上传功能实现 spring-mvc.xml 配置文件上传解析器
1 <!-- 文件上传解析器 id 必须为multipartResolver -->
2 <bean id="multipartResolver" 
3 class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
4 <property name="maxUploadSize" value=“10485760"/> 
5 </bean>
6 
7 maxUploadSize以字节为单位:10485760 =10M id名称必须这样写
1 映射资源目录
2 <mvc:resources location="/upload/" mapping="/upload/**"/>
随即文件名常用的三种方式:
文件上传功能(增强:防止文件重名覆盖)
fileName = UUID.randomUUID().toString() + extName;
fileName = System.nanoTime() + extName;
fileName = System.currentTimeMillis() + extName;
1 if(!file.isEmpty()){
2 ServletContext sc = request.getSession().getServletContext();
3 String dir = sc.getRealPath("/upload");
4 String filename = file.getOriginalFilename();
5 
6 
7 long _lTime = System.nanoTime();
8 String _ext = filename.substring(filename.lastIndexOf("."));
9 filename = _lTime + _ext;
10 
11 FileUtils.writeByteArrayToFile(new File(dir,filename), file.getBytes());
12 
13 p.setPhotoPath("/upload/"+filename);
14 
15 System.out.println("upload over. "+ filename);
16 }
图片显示 personList.jsp
1 <td><img src="${pageContext.request.contextPath}${p.photoPath}">${p.photoPath}</td>
‘肆’ ASP.NET mvc上传多个附件
asp.net默认上限40960K 90秒请求就超时。你是不是传多了
‘伍’ 如何使用springmvc实现文件上传
在现在web应用的开发,springMvc使用频率是比较广泛的,现在给大家总结一下springMvc的上传附件的应用,希望对大家有帮助,废话不多说,看效果
准备jar包
4.准备上传代码
@Controller//spring使用注解管理bean
@RequestMapping("/upload")//向外暴露资源路径,访问到该类
public class UploadController {
/**
* 上传功能
* @return
* @throws IOException
*/
@RequestMapping("/uploadFile")//向外暴露资源路径,访问到该方法
public String uploadFile(MultipartFile imgFile,HttpServletRequest req) throws IOException{
if(imgFile != null ){
//获取文件输入流
InputStream inputStream = imgFile.getInputStream();
//随机产生文件名,原因是:避免上传的附件覆盖之前的附件
String randName = UUID.randomUUID().toString();//随机文件名
//获取文件原名
String originalFilename = imgFile.getOriginalFilename();
//获取文件后缀名(如:jpgpng...)
String extension = FilenameUtils.getExtension(originalFilename);
//新名字
String newName = randName+"."+extension;
//获取servletContext
ServletContext servletContext = req.getSession().getServletContext();
//获取根路径
String rootPath = servletContext.getRealPath("/");
File file = new File(rootPath,"upload");
//判断文件是否存在,若不存在,则创建它
if(!file.exists()){
file.mkdirs();
}
//获取最终输出的位置
FileOutputStream fileOutputStream = new FileOutputStream(new File(file,newName));
//上传附件
IOUtils.(inputStream, fileOutputStream);
}
return null;
}
}
‘陆’ mvc视图中怎么上传图片并显示
如果只是上传的话那太容易了,如果还要显示那就难了,因为要显示的话就不能只向服务器提交一次请求,必须异步提交。下面的例子是我亲自写的,异步提交上传图片并预览。全部代码都在。
返回到前台页面的JSON格式对象是以类的对象。
publicclassReturnImage
{
publicstringbig{get;set;}
publicstringsmall{get;set;}
publicstringisSuccessfull{get;set;}
publicstringmessage{get;set;}
}
对于上传和生成缩略图,请自行完成,以下是ASP.NETMVC的例子。
publicclassHomeController:Controller
{
//
//GET:/Home/
publicActionResultIndex()
{
returnView();
}
///<summary>
///上传图片
///</summary>
///<returns></returns>
publicActionResultUploadImage()
{
//定义错误消息
JsonResultmsg=newJsonResult();
try
{
//接受上传文件
HttpPostedFileBasepostFile=Request.Files["upImage"];
if(postFile!=null)
{
DateTimetime=DateTime.Now;
//获取上传目录转换为物理路径
stringuploadPath=Server.MapPath("~/UploadFiles/"+time.Year+"/"+time.ToString("yyyyMMdd")+"/");
//文件名
stringfileName=time.ToString("yyyyMMddHHmmssfff");
//后缀名称
stringfiletrype=System.IO.Path.GetExtension(postFile.FileName);
//获取文件大小
longcontentLength=postFile.ContentLength;
//文件不能大于2M
if(contentLength<=1024*2048)
{
//如果不存在path目录
if(!Directory.Exists(uploadPath))
{
//那么就创建它
Directory.CreateDirectory(uploadPath);
}
//保存文件的物理路径
stringsaveFile=uploadPath+fileName+"_big"+filetrype;
try
{
//保存文件
postFile.SaveAs(saveFile);
//保存缩略图的物理路径
stringsmall=uploadPath+fileName+"_small"+filetrype;
MakeThumbnail(saveFile,small,320,240,"W");
ReturnImageimage=newReturnImage();
image.big="/UploadFiles/"+time.Year+"/"+time.ToString("yyyyMMdd")+"/"+fileName+"_big"+filetrype;
image.small="/UploadFiles/"+time.Year+"/"+time.ToString("yyyyMMdd")+"/"+fileName+"_small"+filetrype;
msg=Json(image);
}
catch
{
msg=Json("上传失败");
}
}
else
{
msg=Json("文件大小超过限制要求");
}
}
else
{
msg=Json("请选择文件");
}
}
catch(Exceptione)
{
;
}
msg.ContentType="text/html";
returnmsg;
}
///<summary>
由于回答超过最大限制,///生成缩略图的代码请向我索取
‘柒’ springmvc 怎么将文件上传到linux服务器
Spring MVC为文件上传提供了直接的支持,这种支持是通过即插即用的MultipartResolver实现的。Spring使用Jakarta Commons FileUpload 技术实现了一个MultipartResolver实现类:CommonsMultipartResolver。
Spring MVC上下文中默认没有装配MultipartResolver,因此默认情况下不能处理文件的上传工作。如果想要使用Spring的文件上传功能,需要先在上下文中配置MultipartResolver。
第一步:配置MultipartResolver
使用CommonsMultipartResolver配置一个MultipartResolver解析器:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
        p:defaultEncoding="UTF-8"
        p:maxUploadSize="5242880"
        p:uploadTempDir="upload/temp"
        />
defaultEncoding必须和用户JSP的pageEncoding属性一致,以便正确读取表单的内容。uploadTempDir是文件上传过程所使用的临时目录,文件上传完成后,临时目录中的临时文件会被自动清除。
第二步:编写文件上传表单页面和控制器
JSP页面如下:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <title>My JSP 'index.jsp' starting page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
  </head>
  <body>
    <h1>选择上传文件</h1>
    <form action="<%=basePath%>user/upload.do" method="post" enctype="multipart/form-data">
        文件名:<input type="text" name="name" /><br/>
        <input type="file" name="file" /><br/>
        <input type="submit" />
    </form>
  </body>
</html>
注意:负责上传的表单和一般表单有一些区别,表单的编码类型必须是"Multipart/form-data"
控制器UserController如下:
package com.web;
import java.io.File;
import java.io.IOException;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
@Controller
@RequestMapping(value = "/user")
public class UserController {
    @RequestMapping(value = "/upload.do")
    public String updateThumb(@RequestParam("name") String name,
            @RequestParam("file") MultipartFile file)
            throws IllegalStateException, IOException {
        if (!file.isEmpty()) {
            file.transferTo(new File("d:/temp/"
                    + name
                    + file.getOriginalFilename().substring(
                            file.getOriginalFilename().lastIndexOf("."))));
            return "redirect:success.html";
        } else {
            return "redirect:fail.html";
        }
    }
}
Spring MVC会将上传文件绑定到MultipartFile对象中。MultipartFile提供了获取上传文件内容、文件名等内容,通过transferTo方法还可将文件存储到硬件中,具体说明如下:
byte[] getBytes() :获取文件数据 
String getContentType():获取文件MIME类型,如image/pjpeg、text/plain等
InputStream getInputStream():获取文件流
String getName():获取表单中文件组件的名字
String getOriginalFilename():获取上传文件的原名
long getSize():获取文件的字节大小,单位为byte
boolean isEmpty():是否有上传的文件
void transferTo(File dest):可以使用该文件将上传文件保存到一个目标文件中
源码:uploadtest.zip
‘捌’ ASP.NET MVC 上传多个附件Controller 获取不到值
在方法上加个断点 用fiddler ff 或者是chrome 去监视你的上传执行的get 或者post请求看有没有东西如果有而且后台中断变量监视里也有值~检查你后台代码。如果反之检查前面的js。话说你Request.Files["UploadFile"]只有一个参数一个文件流也太简单了。前台请求的时候多传几个参数来个时间戳 随机数什么的。只是Request.Files["UploadFile"]为空也不一定好区分你前台的代码有没有问题
‘玖’ .net MVC中 在视图中上传的附件图片怎么保存到数据库
图片保存到数据库不是最佳的选择. 
你可以搜索一下Uploadify 插件. 这个插件非常好用
一般将图片存为图片文件.
大致代码如下:
    $("#btn_upload_attachment").uploadify({
        height: 25,
        swf: '../Scripts/plugin/uplodify/uploadify.swf',
        uploader: '/Home/Upload',
        queueSizeLimit: 1,
        formData: { ID: newId },
        buttonText: '选择文件',
        width: 80,
        onUploadSuccess: function (file, data, response) {
            eval("data=" + data);
            AddToAttachmentList(data.Data);
        }
    });
后台代码处理:
[AcceptVerbs(HttpVerbs.Post)]
        public JsonResult Upload(HttpPostedFileBase fileData, Guid? ID)
        {
            if (fileData != null)
            {
                try
                {
                    // 文件上传后的保存路径
                    var filePath = Path.Combine(ConfigurationManager.AppSettings["BusinessFiles"], Ticket.OrgId.ToString());
                    if (!Directory.Exists(filePath))
                    {
                        Directory.CreateDirectory(filePath);
                    }
                    var fileName = Path.GetFileName(fileData.FileName);// 原始文件名称
                    var fileExtension = Path.GetExtension(fileName); // 文件扩展名
                    var fileID = Guid.NewGuid();
                    var saveName = fileID.ToString() + fileExtension; // 保存文件名称
                    fileData.SaveAs(filePath + "/" + saveName);
                    // 作为临时附件存入附件表
                    var attachments = new Attachments();
                    attachments.ID = fileID;
                    attachments.OrgID = Ticket.OrgId;
                    attachments.BusinessType = (byte)BusinessType.TransferContract;
                    attachments.Status = (byte)AttachmentStatus.Temp;
                    if (ID.HasValue)
                    {  
                        attachments.BusinessID = ID.Value;
                    }
                    attachments.Extension = fileExtension;
                    attachments.Name = fileName;
                    attachments.Size = fileData.ContentLength;
                    attachments.UploadTime = GetNow();
                    attachments.UploadBy = Ticket.EmployeeName;
                    attachments.UploadByID = Ticket.UserId;
                    AttachmentsBLL.SaveAttachment(attachments);
                    return Json(new { Success = true, FileName = fileName, SaveName = saveName, FileID = fileID, Data = attachments });
                }
                catch (Exception ex)
                {
                    return Json(new { Success = false, Message = ex.Message }, JsonRequestBehavior.AllowGet);
                }
            }
            else
            {
                return Json(new { Success = false, Message = "请选择要上传的文件!" }, JsonRequestBehavior.AllowGet);
            }
        }
