ssm框架下的文件上传和文件下载

ssm框架下的文件上传和文件下载

2019-07-04 你源(转载) 转发原地址为 https://www.cnblogs.com/noahpk/p/8949862.html

**最近在做一个ssm的项目,遇到了添加附件和下载的功能,在网上查了很多资料,发现很多都不好用,经过摸索,发现了一套简便的方法,和大家分享一下。**	

1.在自己已经构建好的maven  web项目中 pom.xml配置文件中添加上传下载所需要的jar包

        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.1</version>
        </dependency>

2.在spring的applicationContext.xml配置文件中添加文件上传解析器

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">    
     <property name="defaultEncoding" value="utf-8"></property>    
     <property name="maxUploadSize" value="5242440"></property>    
</bean>

 

3.文件上传
前台页面使用了easyui,代码如下:

<table>
<tr>
<td>附件</td>
<td>
<input class="easyui-filebox" type="file" name="file1" id="file1"><a href="javascript:imageUpload()" class="easyui-linkbutton">上传</a>
</td>
<td>
<input type="hidden"  id="ssFile" name="ssFile"> <!--用于文件名回显-->
</td>
</tr>
</table>

 

JS方法调用后台:

function imageUpload(){
        var file1 = document.getElementById("file1");  
        var ssFile = document.getElementById("ssFile");  
            ssFile.value = file1.value.substring(12);    //取出文件名,并赋值回显到文本框,用于向后台传文件名
        $.ajaxFileUpload({
            url : '${pageContext.request.contextPath}/bug/uploadFile.do', //用于文件上传的服务器端请求地址
            fileElementId : 'file1', //文件上传空间的id属性  <input type="file" id="file" name="file" />
            type : 'post',
            dataType : 'text', //返回值类型 一般设置为json
            success : function(data, status) //服务器成功响应处理函数
            {
                alert("文件上传成功");
        },
        error : function(data, status, e)//服务器响应失败处理函数

{
alert(“文件上传失败”);

        }
    });
}

  后台实现:

@RequestMapping(value="/uploadFile.do" ,produces="text/html;charset=utf-8" )  
   @ResponseBody String importPicFile1( 
  @RequestParam MultipartFile file1,HttpServletRequest request){  
           Map<String,Object> map= new HashMap<String,Object>();  
           if(file1.isEmpty()){  
                map.put( "result", "error");  
                map.put( "msg", "上传文件不能为空" );  
          } else{  
                String originalFilename=file1.getOriginalFilename();  
                String fileBaseName=FilenameUtils.getBaseName(originalFilename); 
                Date now = new Date();
                SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
                String floderName=fileBaseName+"_" +df.format(now);  
                 try{   
                       //创建要上传的路径
                     File fdir = new File("D:/file");
                     if (!fdir.exists()) { 
                         fdir.mkdirs(); 
                         }
          //文件上传到路径下
                      FileUtils. copyInputStreamToFile(file1.getInputStream(), new File(fdir,originalFilename));  
                       //coding  
                      map.put( "result", "success");  
                        
                } catch (Exception e) {  
                      map.put( "result", "error");  
                      map.put( "msg",e.getMessage());  
                        
                }  
          } 
                }  

4.文件下载

前台页面:

JS方法:

$("#ssUrl").attr('href',"${pageContext.request.contextPath}/bug/download?filename="+fileName) //将后台的路径和文件名赋值给a标签 fileName需要自己从数据库中查出 

后台方法:

/**
     * 文件下载
     * @throws IOException 
     */
    @RequestMapping(value="/download",method=RequestMethod.GET)
    public void download(@RequestParam(value="filename")String filename,
            HttpServletRequest request,
            HttpServletResponse response) throws IOException {
        //模拟文件,myfile.txt为需要下载的文件  
        String path = "D:\\file"+"\\"+filename;  
        //获取输入流  
        InputStream bis = new BufferedInputStream(new FileInputStream(new File(path)));
        //转码,免得文件名中文乱码  
        filename = URLEncoder.encode(filename,"UTF-8");  
        //设置文件下载头  
        response.addHeader("Content-Disposition", "attachment;filename=" + filename);    
        //1.设置文件ContentType类型,这样设置,会自动判断下载文件类型    
        response.setContentType("multipart/form-data");   
        BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());  
        int len = 0;  
        while((len = bis.read()) != -1){  
            out.write(len);  
            out.flush();  
        }  
        out.close();  
    }

  本人亲测可用,大家有什么意见可以交流,第一次写博客,如有疏漏,请多多指教!

1
0
» 下一篇: bootstrap-treeview后台Json数据的封装及前台的显示
	</div>
	<div class="postDesc">posted @ <span id="post-date">2018-04-26 10:21</span> <a href="https://www.cnblogs.com/noahpk/">泡沫同学</a> 阅读(<span id="post_view_count">8256</span>) 评论(<span id="post_comment_count">3</span>)  <a href="https://i.cnblogs.com/EditPosts.aspx?postid=8949862" rel="nofollow">编辑</a> <a href="#" onclick="AddToWz(8949862);return false;">收藏</a></div>
</div>
<script type="text/javascript">var allowComments=true,cb_blogId=399465,cb_entryId=8949862,cb_blogApp=currentBlogApp,cb_blogUserGuid='9459497a-0d5d-4db3-3bf8-08d52fc34315',cb_entryCreatedDate='2018/4/26 10:21:00';loadViewCount(cb_entryId);var cb_postType=1;var isMarkdown=false;</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值