javaWeb文件上传和下载

Posted 整理是一切的开始

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javaWeb文件上传和下载相关的知识,希望对你有一定的参考价值。

第一步

  1. 先新建一个com.aaa.util包
  2. 在包里新建一个FileUtil工具类(包括上传和下载方法)
public class FileUtil {
    /**
     * 通用上传方法
     * @param savePath
     * @param multipartFile
     * @return
     */
    public static String uploadFile(String savePath, MultipartFile multipartFile){
        String originalFilename = multipartFile.getOriginalFilename();
        //获取源文件后缀
        String suffix=originalFilename.substring(originalFilename.lastIndexOf("."));
        //拼装新文件名称
        String newFileName= UUID.randomUUID()+suffix;//UUID.randomUUID()随机字符串
        File file=new File(savePath+ newFileName);//    D:/images/jin.jpg
        try {
            //调用spring提供的方法进行文件读写
            multipartFile.transferTo(file);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return newFileName;
    }
    /**
     * 通用下载方法
     * @param filename
     * @param response
     * @return
     */
    public static String downLoad(String filename,HttpServletResponse response){
        String filePath = "D:/images" ;
        File file = new File(filePath + "/" + filename);
        if(file.exists()){ //判断文件父目录是否存在
            response.setContentType("application/force-download");//MIME类型
            response.setHeader("Content-Disposition", "attachment;fileName=" + filename);
            byte[] buffer = new byte[1024];
            FileInputStream fis = null; //文件输入流
            BufferedInputStream bis = null;
            OutputStream os = null; //输出流
            try {
                os = response.getOutputStream();
                fis = new FileInputStream(file);
                bis = new BufferedInputStream(fis);
           /* int i = bis.read(buffer);
            while(i != -1){
                os.write(buffer);
                i = bis.read(buffer);
            }*/
                int i=0;
                while((i = bis.read(buffer))!=-1){
                    os.write(buffer,0,i);
                }
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            System.out.println("----------file download" + filename);
            try {
                bis.close();
                fis.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return null;
    }
}

controller层代码

@Controller
@RequestMapping("news")
public class NewsController {
    @Autowired
    private NewsService newsService;
    private final ResourceLoader resourceLoader;
    @Autowired
    public NewsController(ResourceLoader resourceLoader) {
        this.resourceLoader = resourceLoader;
    }
    //取出配置文件upload.path的值,赋给uploadPath类变量
    @Value(value = "${upload.path}")
    private String uploadPath;
    /**
     * 跳转添加
     * @return
     */
    @RequestMapping("toAdd")
    public String toAdd(){
        return "add";
    }
    @RequestMapping("add")
    public String add(Model model,@RequestParam Map map, @RequestParam MultipartFile pic){
        if(pic!=null){
            String newFilePath= FileUtil.uploadFile(uploadPath,pic);
            map.put("fileName",pic.getOriginalFilename());
            map.put("picPath",newFilePath);
        }
        int i=newsService.add(map);
        if(i>0){
            model.addAttribute("info","图片添加成功");
            return "redirect:list";
        }else{
            model.addAttribute("info","图片添加失败");
            return "redirect:list";
        }
    }
    /**
     * 新闻列表
     * @return
     */
    @RequestMapping("list")
    public String list(Model model){
        model.addAttribute("newsList",newsService.getList());
        return "list";
    }
    /**
     * 新闻删除
     */
    @RequestMapping("delete")
    public Object delete(Integer id){
        newsService.delete(id);
        return "forward:list";
    }
    /**
     * 新闻修改
     */
    @RequestMapping("toUpdate")
    public String toUpdate(Model model,Integer id){
        List<Map> listById = newsService.getListById(id);
        model.addAttribute("list",listById);
        return "edit";
    }
    @RequestMapping("update")
    public Object update(@RequestParam Map map,@RequestParam MultipartFile pic){
        System.out.println(map);
        String originalFilename = pic.getOriginalFilename();
        String suffix=originalFilename.substring(originalFilename.lastIndexOf("."));
        String newFileName=UUID.randomUUID()+suffix;
        File file=new File(uploadPath+newFileName);
        try {
            pic.transferTo(file);
        } catch (IOException e) {
            e.printStackTrace();
        }
        map.put("picPath",newFileName);
        newsService.update(map);
        return "forward:list";
    }
    @RequestMapping("show")
    public ResponseEntity show(String fileName){
        try {
            // 由于是读取本机的文件,file是一定要加上的, path是在application配置文件中的路径
            return ResponseEntity.ok(resourceLoader.getResource("file:" + uploadPath + fileName));
        } catch (Exception e) {
            return ResponseEntity.notFound().build();
        }
    }
    /**
     * 文件下载
     * @param fileName
     * @param response
     */
    @RequestMapping("/downLoad")
    public void downLoadFile(String fileName, HttpServletResponse response){
        FileUtil.downLoad(fileName,response);
    }
}

dao层代码

public interface NewsDao {
    /**
     * 获取新闻列表
     * @return
     */
    @Select(value = "select * from tb_news")
    List<Map> getList();

    /**
     * 新闻添加
     * @param map
     * @return
     */
    @Insert(value = "insert into tb_news values(seq_news_id.nextval,#{title},#{content},#{type},0,#{picPath})")
    int add(Map map);
    /**
     * 新闻删除
     */
    @Delete(value = "delete from tb_news where newsid=#{newsid}")
    int delete(int id);
    /**
     * 根据id获取新闻信息
     */
    @Select(value = "select * from tb_news where newsid=#{newsid}")
    List<Map> getListById(int id);
    /**
     * 更改新闻信息
     */
    @Update(value = "update tb_news set title=#{title},content=#{content},typeid=#{typeid},picpath=#{picPath} where newsid=#{newsid}")
    int update(Map map);
}

以上是关于javaWeb文件上传和下载的主要内容,如果未能解决你的问题,请参考以下文章

JavaWeb IO流实现文件上传下载

JAVAWEB学习笔记29_文件的上传------commons-fileupload

JavaWeb学习 (二十八)————文件上传和下载

JavaWeb学习总结(五十)——文件上传和下载

javaWeb文件上传和下载

[JavaWeb]文件上传下载和书城项目