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