Spring MVC-文件的上传和下载

2.文件上传

======

(1)导入文件上传的依赖包

commons-fileupload

commons-fileupload

1.3.3

javax.servlet

javax.servlet-api

4.0.1

(2)配置springmvc核心配置文件

参数分析:

属性描述
maxUploadSize上传文件最大长度(以字节为单位)
maxInMemorySize缓存中的最大尺寸
defaultEncoding默认编码格式
resolveLazily推迟文件解析,以便在Controller中捕获文件大小异常

注意:bena的id必须为:multipartResolver , 否则上传文件会报400的错误!

(3)编写前端页面

<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>

$Title$

(4)编写Controller

MultipartFile接口中的主要方法

MultipartFile接口中的主要方法
方法说明
byte[]getBytes()以字节数组的形式返回文件的内容
String getContentType()返回文件的内容类型
InputStream getInputStream()读取文件内容,返回一个InputStream流
String getName()获取多部件form表单的参数名称
String getOriginalFilename()获取上传文件的初始化名
long getSize()获取上传文件的大小,单位是字节
boolean isEmpty()判断上传的文件是否为空
void transferTo(File file)将上传文件保存到目标目录下

package com.yixin.controller;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.multipart.commons.CommonsMultipartFile;

import javax.servlet.http.HttpServletRequest;

import java.io.*;

@Controller

public class FileController {

//@RequestParam(“file”) 将name=file控件得到的文件封装成CommonsMultipartFile 对象

//批量上传CommonsMultipartFile则为数组即可

@RequestMapping(“/upload”)

public String fileUpload(@RequestParam(“file”) CommonsMultipartFile file , HttpServletRequest request) throws IOException {

//获取文件名 : file.getOriginalFilename();

String uploadFileName = file.getOriginalFilename();

//如果文件名为空,直接回到首页!

if (“”.equals(uploadFileName)){

return “redirect:/index.jsp”;

}

System.out.println("上传文件名 : "+uploadFileName);

//上传路径保存设置

String path = request.getServletContext().getRealPath(“/upload”);

//如果路径不存在,创建一个

File realPath = new File(path);

if (!realPath.exists()){

realPath.mkdir();

}

System.out.println(“上传文件保存地址:”+realPath);

InputStream is = file.getInputStream(); //文件输入流

OutputStream os = new FileOutputStream(new File(realPath,uploadFileName)); //文件输出流

//读取写出

int len=0;

byte[] buffer = new byte[1024];

while ((len=is.read(buffer))!=-1){

os.write(buffer,0,len);

os.flush();

}

os.close();

is.close();

return “redirect:/index.jsp”;

}

}

(5)配置tomcat,启动运行

由于我们在配置文件中配置了文件的内存是小于10M,故选择相应的文件,点击upload便会下载到相应的地址。

我们也可以使用CommonsMultipartFile的transferTo进行保存地址。

(可以看到这种方式来保存比较简洁)

@RequestMapping(“/upload2”)

public String fileUpload2(@RequestParam(“file”) CommonsMultipartFile file, HttpServletRequest request) throws IOException {

//上传路径保存设置

String path = request.getServletContext().getRealPath(“/upload”);

File realPath = new File(path);

if (!realPath.exists()){

realPath.mkdir();

}

//上传文件地址

System.out.println(“上传文件保存地址:”+realPath);

//通过CommonsMultipartFile的方法直接写文件(注意这个时候)

file.transferTo(new File(realPath +“/”+ file.getOriginalFilename()));

return “redirect:/index.jsp”;

}

前端更改提交地址,同样可以到达保存的目的。

3.文件下载

=========

(1)编写Controller

@RequestMapping(value=“/download”)

public String downloads(HttpServletResponse response , HttpServletRequest request) throws Exception{

//要下载的图片地址

String path = request.getServletContext().getRealPath(“/upload”);

String fileName = “logo.jpg”;

//1、设置response 响应头

response.reset(); //设置页面不缓存,清空buffer

response.setCharacterEncoding(“UTF-8”); //字符编码

response.setContentType(“multipart/form-data”); //二进制传输数据

//设置响应头

response.setHeader(“Content-Disposition”,

“attachment;fileName=”+ URLEncoder.encode(fileName, “UTF-8”));

File file = new File(path,fileName);

//2、 读取文件–输入流

InputStream input=new FileInputStream(file);

//3、 写出文件–输出流

OutputStream out = response.getOutputStream();

byte[] buff =new byte[1024];

int index=0;

//4、执行 写出操作

while((index= input.read(buff))!= -1){

out.write(buff, 0, index);

out.flush();

}

out.close();

input.close();

return null;

}

(2)编写前端

点击下载

(3)运行

点击下载后,可以发现浏览器会下载logo.jpg这个文件。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值