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();
		} 

	}

}


猜你喜欢

转载自blog.csdn.net/fwk19840301/article/details/80508436