java上传下载

文件上传一直是Web项目中必不可少的一项功能。

项目结构如下:(这是我之前创建的SSM整合的框架项目,在这上面添加文件上传与下载)

主要的是FileUploadController,doupload.jsp,up.jsp,springmvc.xml

1.先编写up.jsp

<form action="doupload.jsp" enctype="multipart/form-data" method="post">
           <p>上传者:<input type="text" name="user"></p> 
           <p>选择文件:<input type="file" name="nfile"></p> 
           <p>选择文件:<input type="file" name="nfile1"></p> 
           <p><input type="submit" value="提交"></p>
   </form>
以上便是up.jsp的核心代码;

2.编写doupload.jsp

<%
    request.setCharacterEncoding("utf-8");
    String uploadFileName = ""; //上传的文件名
    String fieldName = "";  //表单字段元素的name属性值
    //请求信息中的内容是否是multipart类型
    boolean isMultipart = ServletFileUpload.isMultipartContent(request);
    //上传文件的存储路径(服务器文件系统上的绝对文件路径)
    String uploadFilePath = request.getSession().getServletContext().getRealPath("upload/" );
    if (isMultipart) {
        FileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);
        try {
            //解析form表单中所有文件
            List<FileItem> items = upload.parseRequest(request);
            Iterator<FileItem> iter = items.iterator();
            while (iter.hasNext()) {   //依次处理每个文件
                FileItem item = (FileItem) iter.next();
                if (item.isFormField()){  //普通表单字段
                    fieldName = item.getFieldName();   //表单字段的name属性值
                    if (fieldName.equals("user")){
                        //输出表单字段的值
                        out.print(item.getString("UTF-8")+"上传了文件。<br/>");
                    }
                }else{  //文件表单字段
                    String fileName = item.getName();
                    if (fileName != null && !fileName.equals("")) {
                        File fullFile = new File(item.getName());
                        File saveFile = new File(uploadFilePath, fullFile.getName());
                        item.write(saveFile);
                        uploadFileName = fullFile.getName();
                        out.print("上传成功后的文件名是:"+uploadFileName);    
                        out.print("\t\t下载链接:"+"<a href='download.action?name="+uploadFileName+"'>"+uploadFileName+"</a>");
                        out.print("<br/>");    
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
%>
该页面主要是内容是,通过解析request,并设置上传路径,创建一个迭代器,先进行判空,再通过循环来实现多个文件的上传,再输出文件信息的同时打印文件下载路径。

效果图:

3.编写FilterController实现文件下载的功能(相对上传比较简单):

@Controller
public class FileUploadController {
    @RequestMapping(value="/download")
    public ResponseEntity<byte[]> download(HttpServletRequest request,HttpServletResponse response,@RequestParam("name") String filename)throws Exception {    
        //下载显示的文件名,解决中文名称乱码问题  
        filename=new String(filename.getBytes("iso-8859-1"),"UTF-8");
        //下载文件路径
        String path = request.getServletContext().getRealPath("/upload/");
        File file = new File(path + File.separator + filename);
        HttpHeaders headers = new HttpHeaders();  
        //下载显示的文件名,解决中文名称乱码问题  
        String downloadFielName = new String(filename.getBytes("iso-8859-1"),"UTF-8");
        //通知浏览器以attachment(下载方式)打开图片
        headers.setContentDispositionFormData("Content-Disposition", downloadFielName); 
        //application/octet-stream : 二进制流数据(最常见的文件下载)。
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),    
                headers, HttpStatus.CREATED);  
    }
}
4.实现上传文件的功能还需要在springmvc中配置bean:

<bean id="multipartResolver"  
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
        <!-- 上传文件大小上限,单位为字节(10MB) -->
        <property name="maxUploadSize">  
            <value>10485760</value>  
        </property>  
        <!-- 请求的编码格式,必须和jSP的pageEncoding属性一致,以便正确读取表单的内容,默认为ISO-8859-1 -->
        <property name="defaultEncoding">
            <value>UTF-8</value>
        </property>
    </bean>
完整代码如下:

up.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>File控件</title>
  </head>
  
  <body>
   <form action="doupload.jsp" enctype="multipart/form-data" method="post">
           <p>上传者:<input type="text" name="user"></p> 
           <p>选择文件:<input type="file" name="nfile"></p> 
           <p>选择文件:<input type="file" name="nfile1"></p> 
           <p><input type="submit" value="提交"></p>
   </form>
  </body>
</html>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值