@RestController public class FileController { @Autowired @Qualifier("menusService") private MenusService menusService; @RequestMapping("upload") public String fileUpload(CommonsMultipartFile file, Menus menus, HttpServletRequest request)throws IOException { menusService.insert(menus); //获取文件名 String uploadFilename = file.getOriginalFilename(); //如果文件名为空,直接返回 if("".equals(uploadFilename)){ return "redirect: menus_add.jsp"; } System.out.println("上传文件名:"+uploadFilename); //上传保存路径 String path=request.getServletContext().getRealPath("/public/img"); //如果路径不存在,新建一个 File realPath= new File(path); if (!realPath.exists()){ realPath.mkdirs(); } 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 "/admin/main"; } }
时间: 2024-02-14 08:32:35 浏览: 66
@Controller、@RestController注解区别详解
5星 · 资源好评率100%
这段代码是一个基于Spring框架开发的文件上传的控制器代码。以下是对代码的解释:
1. `@RestController`:该注解表示这是一个控制器类,用于接收和处理用户的请求,并返回数据给客户端。
2. `@Autowired`:该注解用于自动注入依赖对象,这里注入了MenusService类的实例。
3. `@Qualifier("menusService")`:该注解用于指定要注入的具体实现类的名称,这里指定了menusService。
4. `@RequestMapping("upload")`:该注解指定了处理文件上传请求的URL路径。
5. `menusService.insert(menus)`:调用MenusService类的insert方法来插入菜单信息。
6. `file.getOriginalFilename()`:获取上传文件的原始文件名。
7. 如果上传文件名为空,直接返回到 "menus_add.jsp" 页面。
8. `request.getServletContext().getRealPath("/public/img")`:获取文件上传保存的路径。
9. `File realPath = new File(path)`:创建一个文件对象,表示文件上传保存的实际路径。
10. 如果路径不存在,则创建该路径。
11. `InputStream is = file.getInputStream()`:获取上传文件的输入流。
12. `OutputStream os = new FileOutputStream(new File(realPath,uploadFilename))`:创建一个文件输出流,用于将上传文件写入到指定路径下。
13. 使用循环读取输入流中的数据,并将数据写入输出流中,实现文件的上传。
14. 关闭输入流和输出流。
15. 返回 "/admin/main",表示文件上传成功后跳转到管理员主页。
这段代码实现了文件上传的功能,将上传的文件保存到指定路径下,并将菜单信息插入到数据库中。成功上传后,跳转到管理员主页。
阅读全文