springmvc之文件上传、下载

摘要:
文件isEmpty()){ServletContextsc=request.getSession().getServletContext();Stringdir=sc.getRealPath;//设置保存文件的目录Stringfilename=file.getOriginalFilename();//获取文件名FileUtils.writeByteArrayToFile;p.setPhotoPath;//设定映像System.out.println的路径;}ps.saveOrUpdate;return“redirect://person/list.action”;//重定向}2.1。页面<formaction=“/saveOrUpdate”enctype=“multipart/form-data”method=“post”><inputtype=“file”name=“photo”>><inputtype=“submit”value=“commit”></form˃2.2。您需要添加<!

1、接收到的是图片的流时

//上传头像
    @RequestMapping(value = "/uploadHeadSculpture", method = RequestMethod.POST)
    @ResponseBody
    public String uploadHeadSculpture(@RequestParam("photo") String file) {
        User user = (User) SecurityUtils.getSubject().getSession().getAttribute("curr_user");
        //获取文件格式
        String postfix = file.split("/")[1].split(";")[0];
        //获取图片的Base64码
        String str = file.split(",")[1];
        String url = "";
        BASE64Decoder decoder = new BASE64Decoder();
        try {
            // Base64解码
            byte[] bytes = decoder.decodeBuffer(str);
            for (int i = 0; i < bytes.length; ++i) {
                // 调整异常数据
                if (bytes[i] < 0) {
                    bytes[i] += 256;
                }
            }
            long title = Calendar.getInstance().getTimeInMillis();
            //获取系统路径并设定文件保存的目录
            String dir = ServiceConfigUtil.getValue("imgpath");//图片的上传路径,我这里是从工程的配置文件获取的
            String fileName = title + "." + postfix;
            // 生成jpeg图片
            FileUtils.writeByteArrayToFile(new File(dir, fileName), bytes);
            String lookUserPhoto = ServiceConfigUtil.getValue("lookUserPhoto");//图片的访问路径,我这里是从工程配置文件获取的,可以自己定义。如果你的图片保存在工程目录下,可以直接用dir+fileName
            url = lookUserPhoto + fileName;//保存到数据库的图片访问路径
            /××
        ×保存url到数据库
       ××/
} catch (Exception e) {return "no"; }return "yes"; }

注:接收参数file值的一个基本格式

  "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAdiUlEQVR........."

2、接收到的是file文件直接上传

 @RequestMapping(value={"/saveOrUpdate"},method=RequestMethod.POST)
 public String saveOrUpdate(Person p, @RequestParam("photo") MultipartFile file, HttpServletRequest request) throws IOException{
     if(!file.isEmpty()){
        ServletContext sc = request.getSession().getServletContext();
         String dir = sc.getRealPath(“/upload”);    //设定文件保存的目录
        
        String filename = file.getOriginalFilename();    //得到上传时的文件名
        FileUtils.writeByteArrayToFile(new File(dir,filename), file.getBytes());
        
        p.setPhotoPath(“/upload/”+filename);    //设置图片所在路径
        
        System.out.println("upload over. "+ filename);
    }    
    ps.saveOrUpdate(p);    
    return "redirect:/person/list.action";   //重定向
}

 2.1、页面

<form action="/saveOrUpdate" enctype="multipart/form-data" method="post">
    <input type="file" name="photo">
    <input type="submit" value="commit">
</form>

2.2、需要在springmvc配置文件中添加

<!--上传文件-->
    <bean  
          class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="10000000000000"/>
        <property name="defaultEncoding" value="UTF-8"/>
    </bean>

3、文件下载

private void downFile(String filename, String realPath, HttpServletResponse response) throws IOException {
        try {
            filename = new String(filename.getBytes("ISO-8859-1"), "UTF-8");
        } catch (UnsupportedEncodingException e) {
            log.warn("文件转码出现异常异常信息为:" + ExceptionUtil.print(e));
        }
        log.debug("下载的文件名:" + filename);
        log.debug("下载的文件路径:" + realPath);
        OutputStream os = null;
        InputStream inputStream = null;
        try {
            response.setCharacterEncoding("utf-8");
            response.setContentType("multipart/form-data");
            response.setContentType("application/x-download");
            response.setHeader("Content-Disposition", "attachment;fileName="
                    + filename);
            inputStream = new FileInputStream(realPath);
            os = response.getOutputStream();
            byte[] b = new byte[1024];
            int length;
            while ((length = inputStream.read(b)) != -1) {
                os.write(b, 0, length);
            }
            os.flush();
        } catch (IOException e) {
            log.warn("下载文件出现异常,异常信息为:" + ExceptionUtil.print(e));
        } finally {
            inputStream.close();
            os.close();
        }
    }

参考:springmvc文件上传

数据导出:java 导出excel到客户端(本地)例子 用poi和servlet实现的

免责声明:文章转载自《springmvc之文件上传、下载》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇关于主流播放器蛋疼的联网功能的研究Java 签名(SHA1WithRSA、SHA256WithRSA、SHA256withECDSA)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

HiveSQL 数据操控、查询语言(DML、DQL)

第一章 DML-Load加载数据 1.1 背景 回想一下,当在Hive中创建好表之后,默认就会在HDFS上创建一个与之对应的文件夹,默认路径是由参数hive.metastore.warehouse.dir控制,默认值是/user/hive/warehouse。 要想让hive的表和结构化的数据文件产生映射,就需要把文件移到到表对应的文件夹下面,当然,可以在...

activiti流程动态创建

前言: 这些天由于一直在设计新系统的数据库表,导致了activiti的迟迟更新,原本之前是打算先分享下监听器的。结果被工作耽搁了,期间正好了解到新系统有这样的一个功能,流程的动态创建,即用户在前端界面选择任务节点,后台生成流程实例。参考了下网上的资料,再改了改,最终也实现了,觉得可用性还是挺大的,所以先来分享一下吧。 先附上参考链接吧,毕竟也得尊重下别人的...

Java 设计模式六原则及23中常用设计模式

一、设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访...

Struts2(二)— Result结果配置、Servlet的API的访问、模型驱动、属性驱动

一.Result结果配置 1.全局和局部结果 ​   平常我们设置跳转页面,是在action标签里面加上 result标签来控制,这种设置的页面跳转,称之为局部结果页面但是我们有时候在很多个action里面,针对不同的结果进行跳转时,也有可能跳转同一个页面,那么这个时候就可以配置全局结果页面。 1.1局部结果 在action里面写上的result跳转的页...

仿华为 USB mode 实现方法

极力推荐文章:欢迎收藏Android 干货分享 阅读5分钟,每日十点、和您一起终身学习,这里是程序员Android 本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容: 一、实现效果 二、主要实现思路 三、主要实现代码 四、在Framework 层添加资源的方法 一、实现效果 仿华为USB Mode弹窗实现效果如...

springboot之配置文件

springboot在加载配置文件的时候是有先后顺序的,了解加载配置文件的先后顺序,可以减少编写程序出现错误 1 springboot加载配置文件的先后顺序如下: SpringApplication将从以下位置加载application.properties文件,并把它们添加到Spring Environment中: 当前目录下的/config子目录。...