基于springmvc实现上传下载的案例

上传下载的实现,直接上代码


第一步:配置文件

web.xml 的配置

=======================================================================

   <!--编码设置,避免乱码--->
   <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
</filter>
<filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
</filter-mapping>
<!--servlet核心配置-->
<servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <!-- struts习惯使用/*,在springmvc不管用 -->
        <url-pattern>*.do</url-pattern>
</servlet-mapping>


========================================================================

springmvc 的配置文件

========================================================================

<!-- mvc注解驱动 -->
    <mvc:annotation-driven/>
    <!-- 扫描器已经有了上面这个mvc注解驱动的功能了,所以不需要了 -->
    <context:component-scan base-package="com.pk.web.controller" />
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="defaultEncoding" value="utf-8" />
        <property name="maxUploadSize" value="104857600"/>
        <property name="maxInMemorySize" value="4096"/>
    </bean>
    <!-- 前缀+ viewName +后缀 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- webroot到某一指定的文件夹的路径 -->
        <property name="prefix" value="/WEB-INF/jsp/"></property>
      <!--  自己在你的 /WEB-INF/jsp下建立给jsp见面吧。或者该我上面的配置 -->
        <!-- 视图名称的后缀 -->
        <property name="suffix" value=".jsp"></property>
    </bean>


=======================================================================

jsp页面的简单实现

=======================================================================

<!--a标签 简单的超链接-->
  <a href="file/download.do?fileName=map.txt">下载1 </a><br />
<!--form表单,一个简单的提交-->
<form action="file/upload.do" method="post" enctype="multipart/form-data">
        选择文件:<input type="file" name="file">
        <input type="submit" value="上传">
</form>

=======================================================================

spring controller层的实现

=======================================================================

package com.pk.web.controller;


import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;


/**
 * Created by Administrator on 2017/3/18.
 */
@Controller
@RequestMapping("file")
public class UploadController {
/**
*上传附件
*
*/
@RequestMapping("/upload.do")
public String upload(HttpServletRequest request,
HttpServletResponse response) throws IOException {
        // 这里用到了jar包
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(
request.getSession().getServletContext());
if (multipartResolver.isMultipart(request)) {
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;


Iterator<String> iter = multiRequest.getFileNames();
while (iter.hasNext()) {
MultipartFile file = multiRequest.getFile((String) iter.next());
if (file != null) {
String fileName = file.getOriginalFilename();


String path1 = Thread.currentThread()
.getContextClassLoader().getResource("").getPath()
+ "download" + File.separator;


//  下面的加的日期是为了防止上传的名字一样
String path = path1
+ new SimpleDateFormat("yyyyMMddHHmmss")
.format(new Date()) + fileName;
File localFile = new File(path);
file.transferTo(localFile);
}


}


}
return "uploadSuccess";


}

@RequestMapping("/toUpload.do")
public String toUpload() {
return "upload";
}


//下载实现
@RequestMapping("/download")
public void download(String fileName, HttpServletRequest request,
HttpServletResponse response) {
response.setCharacterEncoding("utf-8");
response.setContentType("multipart/form-data");
response.setHeader("Content-Disposition", "attachment;fileName="
+ fileName);
try {
String path = Thread.currentThread().getContextClassLoader()
.getResource("").getPath()
+ "download";//这个download目录为啥建立在classes下的
InputStream inputStream = new FileInputStream(new File(path
+ File.separator + fileName));


OutputStream os = response.getOutputStream();
byte[] b = new byte[2048];
int length;
while ((length = inputStream.read(b)) > 0) {
os.write(b, 0, length);
}
// 这里主要关闭。
os.close();
inputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
         //  返回值要注意,要不然就出现下面这句错误!
         //java+getOutputStream() has already been called for this response
//return null;
}
}

=======================================================================

业务所需要的相应的jar文件:

导入jar包:ant.jar、commons-fileupload.jar、connom-io.jar




























  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值