mvc多文件上传
① 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大文件上传详解及实例代码
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>