springmvc文件上传和文件下载

文件上传是项目开发中最常见的功能之一 ,springMVC 可以很好的支持文件上传,但是SpringMVC上下文中默认没有装配MultipartResolver,因此默认情况下其不能处理文件上传工作。如果想使用Spring的文件上传功能,则需要在上下文中配置MultipartResolver。

文件上传

创建一个upload.html:

```html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    注意name "uploadFile" 一定要和后台一样
<form action="/upload/upload" method="post" enctype="multipart/form-data">
    头像:<input type="file" name="uploadFile"><br/>
    <input type="submit" value="提交">

</form>
</body>
</html>

配置文件上传解析器 :

<!--配置文件上传解析器-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!--请求编码格式-->
        <property name="defaultEncoding" value="utf-8"/>

        <!--上传文件大小上限-->
        <property name="maxUploadSize" value="1048576000"/>

        <!--上传文件单个大小上限-->
        <property name="maxUploadSizePerFile"  value="10485760"/>
    </bean>

控制层 controller

@Controller
@RequestMapping("/upload")
public class UploadController {
    @RequestMapping("/upload")
    @ResponseBody
    public String  upload(MultipartFile  uploadFile, HttpServletRequest  request){
        String  originalFilename=uploadFile.getOriginalFilename();//获取原始文件名称
        System.out.println(originalFilename);

        //目的仓库地址在项目内部
        //String  upload=request.getServletContext().getRealPath("upload");//存储文件的文件夹路径

        //目的仓库地址在项目内部
        String  upload="D:\\upload";
        System.out.println(upload);
        //与目的地建立连接
        File file=new File(upload);
        if(!file.exists()){//判断是否存在,不存在创建
            file.mkdirs();
        }
        //获取文件后缀名
        String  suffix=originalFilename.substring(originalFilename.lastIndexOf("."),originalFilename.length());
        //构建文件上传具体路径
        String  filename=upload.concat(File.separator).concat(UUID.randomUUID().toString()).concat(suffix);
        System.out.println(filename);
        try {
            //上传
            uploadFile.transferTo(new File(filename));
            return filename;
        } catch (IOException e) {
            e.printStackTrace();
        }
     return null;
    }

文件下载

文件的下载与文件的上传其实并没与多大变化,唯一变化的就是Controller层

控制层 controller


    /**
     * 文件下载
     * ResponseEntity进行返回的
     */
    @RequestMapping("/download")
    public ResponseEntity<byte[]> download(HttpServletRequest request,String filename){
        //文件地址在项目内部的(目的地址信息)
        //String  upload=request.getServletContext().getRealPath("upload");

        //目的仓库在项目之外
        String  upload="D:\\upload";
        //先拼接具体的位置路径,然后通过file进行建立连接
        File file=new File(upload+File.separator+filename);
        if(!file.exists()){//如果不存在文件,直接返回null
            return null;
        }

        try {
            //创建标头文件对象
            HttpHeaders  headers=new HttpHeaders();
            //解决乱码问题
            String  downloadfile=new String(filename.getBytes(StandardCharsets.UTF_8),"iso-8859-1");
            //以下载的方式打开文件
            headers.setContentDispositionFormData("attachment",filename);
            //二进制流
            headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
            return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.CREATED);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();

        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;

    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值