Java上传下载完全解析(一)

  在Java Web开发中,经常会用到上传与下载文件,典型的案例即为服务器获取上传的文件,将其保存至本地,并获取其下载的文件url,客户端在获取下载的url后,在服务器进行下载。下面我们就来说一下Java中文件的上传。

  一、设置CommonsMultipartResolver

  在Spring中,我们可以使用CommonsMultipartResolver来上传文件,所以我们需要声明一个CommonsMultipartResolver的bean对象,也可以明确的告诉Spring上传文件的大小限制:

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

 其中的maxUploadSize即为最大上传的大小,单位为B,所以10485760为10M


 二、CommonsMultipartResolver的使用:

  1、得到CommonsMultipartResolver对象:

CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext()); //其中request即为我们请求的HttpServletRequest对象

  2、判断请求是否为MultiPart File文件上传请求:

boolean isFileUpload = multipartResolver.isMultipart(request);


三、MultipartHttpServletRequest的使用

  在确定了是多文件上传的请求后,即可以将HttpServletRequest转成MultipartHttpServletRequest对象,MultipartHttpServletRequest对象封装了文件上传的文件对象,可以通过此对象直接得到文件对象。

  1、得到文件名称列表的迭代器:

  Iterator<String> iter = multiRequest.getFileNames();

  2、取得上传的文件:

 MultipartFile file = multiRequest.getFile(iter.next());


四、上传的示例代码:

    @ResponseBody
    @RequestMapping("/up")
    public FileUploadResponse upload(HttpServletRequest request) throws IllegalStateException, IOException, NoSuchAlgorithmException {

        String fileHttpPath = "";
        //创建一个通用的多部分解析器
        CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
        //判断 request 是否有文件上传,即多部分请求
        if (multipartResolver.isMultipart(request)) {
            //转换成多部分request
            MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
            //取得request中的所有文件名
            Iterator<String> iter = multiRequest.getFileNames();
            while (iter.hasNext()) {
                //记录上传过程起始时的时间,用来计算上传时间
                int pre = (int) System.currentTimeMillis();
                //取得上传文件
                MultipartFile file = multiRequest.getFile(iter.next());
                if (file != null) {
                    //取得当前上传文件的文件名称
                    String myFileName = file.getOriginalFilename();
                    //如果名称不为空,说明该文件存在,否则说明该文件不存在
                    if (!myFileName.trim().isEmpty()) {
                        System.out.println(myFileName);

                        String fileName = getRondomFileName() + getFileType(myFileName);
                        //定义本地路径
                        String path = filePath + fileName;
                        File localFile = new File(path);
                        file.transferTo(localFile);

                        fileHttpPath = fileDownloadPath + fileName;
                    }
                }
                //记录上传该文件后的时间
                int finaltime = (int) System.currentTimeMillis();
                System.out.println(finaltime - pre);
            }

        }
        FileUploadResponse uploadResponse = new FileUploadResponse();
        uploadResponse.setFilePath(fileHttpPath);
        return uploadResponse;
    }


五、

  下一篇的地址为Java上传下载完全解析(二) ,会讲Java Web中文件的下载与文件位置配置信息在开发与生产环境中的切换方法。  

  另外此项目的github地址为FileService,里面会有上面源码中没有的一些工具类,欢迎大家下载,如果感觉有帮助的话,也可以star一下哦。


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值