Springboot 上传与下载

TDD设计模式

一、Test类

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserControllerTest {

	@Autowired
	private WebApplicationContext wac;

	private MockMvc mockMvc;

	@Before
	public void setup() {
		mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
	}
	
	@Test
	public void whenUploadSuccess() throws Exception {
		String result = mockMvc.perform(fileUpload("/file")
				.file(new MockMultipartFile("file", "test.txt", "multipart/form-data", 
                                 "hello upload".getBytes("UTF-8"))))
				.andExpect(status().isOk())
				.andReturn().getResponse().getContentAsString();
		System.out.println(result);
	}
} 

二、controller类

@RestController
@RequestMapping("/file") //上传 
public class FileController {

	private String folder = "/main/java/com/imooc/web/controller";

	@PostMapping
	public FileInfo upload(MultipartFile file) throws Exception {
                InputStream inputStream = file.getInputStream(); // 可以直接获取输入流
                byte[] bytes = new byte[0]; 
                bytes = new byte[inputStream.available()];//根据输入流的大小 创建字节数组
                inputStream.read(bytes); 
                String str = new String(bytes,"utf-8"); //处理中文乱码
                System.out.println(str);
		System.out.println(file.getName());
		System.out.println(file.getOriginalFilename());
		System.out.println(file.getSize());
              
		File localFile = new File(folder, new Date().getTime() + ".txt");

		file.transferTo(localFile);//转存到本地文件夹

		return new FileInfo(localFile.getAbsolutePath()); //返回的本地文件的绝对路径
	}

	@GetMapping("/{id}")  //下载
	public void download(@PathVariable String id, HttpServletRequest request, HttpServletResponse response)
 throws Exception {

		try (InputStream inputStream = new FileInputStream(new File(folder, id + ".txt"));
				OutputStream outputStream = response.getOutputStream();) {  //JDK1.7的新语法 自动关闭流
			
			response.setContentType("application/x-download");
			response.addHeader("Content-Disposition", "attachment;filename=test.txt");
			
			IOUtils.copy(inputStream, outputStream);
			outputStream.flush();
		} 

	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

javafanwk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值