SSM框架下使用MultipartFile上传文件

在maven中,首先导入commons-fileupload和commons-io的包,我用的是1.3的fileupload的包和2.4的io的包

<commons-fileupload.version>1.3</commons-fileupload.version>
<commons-io.version>2.4</commons-io.version>
<dependency>
	<groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>${commons-fileupload.version}</version>
</dependency>
<dependency>
	<groupId>commons-io</groupId>
	<artifactId>commons-io</artifactId>
	<version>${commons-io.version}</version>
</dependency>

然后需要在SpringMVC做配置,用的是 的MultipartFile来进行文件上传 所以我们首先要配置MultipartResolver:用于处理表单中的file,我这里就简单的配置一下上传的最大问文件的大小和编码而已

<!-- 上传文件拦截,设置最大上传文件大小   10M=10*1024*1024(B)=10485760 bytes -->  
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="maxUploadSize" value="104857600" />
        <property name="defaultEncoding" value="UTF-8"/> 
        <property name="resolveLazily" value="true"/> 
</bean>

接下面就是前段的代码了:

由于上传所遵循的传输协议要求特殊,所以要在前端提交表单的时候添加一个属性 enctype即encoding type ,可以用个这个链接了解为什么要加这个属性 https://blog.csdn.net/qq_32003379/article/details/91362750

文件上传的内容在正文,必须使用POST请求而不是GET,为啥呢?

简单来说:

首先:Post传输数据时,不需要在URL中显示出来,而Get方法要在URL中显示。 
其次:Post传输的数据量大,可以达到2M,而Get方法由于受到URL长度限制,只能传递大约1024字节. 
再次:Post就是为了将数据传送到服务器段,Get就是为了从服务器段取得数据.而Get之所以也能传送数据,只是用来设计告诉服务器,你到底需要什么样的数据.Post的信息作为http请求的内容,而Get是在Http头部传输的。 

<form id="inputForm" action="${ctx}/dataImport/upload" method="post" class="form-horizontal"
	enctype="multipart/form-data">
		<div class="control-group">
			<label class="control-label">选择文件:</label>
			<div class="controls">
				<input type="file" name="file" id="file" accept=".zip" style="width:330px" class="required">
				<input id="btnSubmit" class="btn btn-primary" type="submit" value="上传"/>&nbsp;
				<input id="btnDown" class="btn btn-primary" type="button" value="下载模板" onclick="window.location.href = '${ctx}/dataImport/downTemplate'"/>&nbsp;
			</div>
		</div>
</form>

控制类部分的,我们使用MultipartFile去做接收,我这里不写@RequestParam这个注解,因为我的file和前端的file是想对应的,所以不需要写。

/**
	 * 上传数据
	 * @param file
	 * @param model
	 * @return
	 */
	@RequiresPermissions("porg:dataImport:upload")
	@RequestMapping(value = "upload", method=RequestMethod.POST)
	public String upload(MultipartFile file, Model model) {
		String log= "";
		//上传数据
		try {
			//1,获取原始文件名
			String originalFilename = file.getOriginalFilename();
			//2,截取源文件的文件名前缀,不带后缀
			String fileNamePrefix = originalFilename.substring(0,originalFilename.lastIndexOf("."));
			//3,加工处理文件名,原文件加上时间戳
			String newFileNamePrefix  = fileNamePrefix + System.currentTimeMillis();
			//4,得到新文件名
			String newFileName = newFileNamePrefix + originalFilename.substring(originalFilename.lastIndexOf("."));
			/*
			* 这里就可以写你自己想要的业务逻辑了
			* */
			log = dataImportService.upload(file).getMessage();
		} catch (Exception e) {
			e.printStackTrace();
		}
		model.addAttribute("log", log);
		this.addMessage(model, "查看导入信息!");
		return "modules/org/porg/dataImportIndex";
	}

以上的就是上传的一些简单的代码,关于Service层的,就不写了,这个需要根据相关的业务去写。

对于MultipartFile有一些常用的方法

String getContentType()//获取文件MIME类型
InputStream getInputStream()//后去文件流
String getName() //获取表单中文件组件的名字
String getOriginalFilename() //获取上传文件的原名
long getSize()  //获取文件的字节大小,单位byte
boolean isEmpty() //是否为空
void transferTo(File dest) //保存到一个目标文件中。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值