Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 605|回复: 0

基于Springmvc使用jq异常图片上传至fastDFS 加回显

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-9-8 10:43:44 | 显示全部楼层 |阅读模式

    我们在开发的时候经常遇到一个场景,在修改一个对象信息的时候,会让图片上传上去,并加显。比如个人信息的头像上传,品牌信息的图片上传

    分析:

    1. 这种场景下我们经常会使用ajax异步传输的方式来实现这个功能。
    2. 我们这里使用的是基于springmvc开发的。所有需要给springmvc进行配置.(添加一个接收文件的配置文件,搭建环境这里不提)。
    3.当图片较多的时候,需要用到fastDFS专门设置一个图片服务器

    第一步:导入jquery.form.js

    <script src="/js/jquery.form.js" type="text/javascript"></script>

    第二步:编辑前端页面

    <!--表单-->
    <form id="jvForm" >
        <input type="file" name="pic"  onchange="uploadPic()"/>
    </form>

    <!--js-->

    <script type="text/javascript">
        
        function uploadPic(){
            
            var option={
                    url:"/upload/uploadPic.do",           <!--提交到后台的地址,让controller接收-->
                    type:"POST",
                    dataType:"json",   <!--注意这里dataType:"json" 中的json不能是大写的 要不不识别,返回的json字符串,小写的返回json对象-->
                    success:function(data){
                        alert(data);   //返回的是  Object object为json对象 否则为json字符串
                        // 图片回显
                        $("#allUrl").attr("src",data.allUrl);
                    
                        
                    }
            }
            $("#jvForm").ajaxSubmit(option);
        }
        
    </script>

     

    第三步:在后台spring配置文件上传解析器

    <!-- 配置上传解析器 -->
        <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver>
            <property name="maxUploadSize" value="5242880"></property>    
        </bean>

    第四步:后台处理

    @RequestMapping("/upload")
    public class UploadController {
    
        @Resource
        private UploadService uploadService;
        
        @SuppressWarnings("deprecation")
        @RequestMapping("/uploadPic.do")
        public void uploadPic(MultipartFile pic,HttpServletRequest 
        request,HttpServletResponse response) throws Exception{
            <!--形参上的pic必须和前台页面的传递的<input>标签的name中的值一样-->    
            
            
            <!--这里是调用方法保存图片-->
            String path=uploadService.uploadPic(pic.getBytes(), pic.getOriginalFilename());
            
            //图片回显
            String allUrl=XinbabaConstants.IMG_URL+path;
            JSONObject  jsonObject=new JSONObject();
            jsonObject.put("allUrl", allUrl);  //图片完整url
            jsonObject.put("imgUrl", path);          //图片部分URL
            response.setContentType("application/json;charset=UTF-8");
            response.getWriter().write(jsonObject.toString());
        }
    
    }

    说明:将json对象返回,在前台通过j操作将值图片地址添加到<img>标签中 至此图片就算回显完成,下面的操作就是将图片添加到服务器中,也就是说的保存图片

    第五步:保存图片到fastDFS服务器上

    service层

    /**
         * 附件上传至FastDFS
         */
        @Override
        public String uploadPic(byte[] file_buff, String filename) throws Exception {
            <!--调用fastDFS工具完成图片上传  file_fuff是文件的字节数组,finame 文件的直实名称-->
            String path = FastDFSUtil.uploadPicToFDFS(file_buff, filename);
            
            return path;  //返回图片的路径
        }
    • 编写fastUtls工具类
    • public class FastDFSUtil {
      
          public static String uploadPicToFDFS(byte[] file_buff,String filename) throws Exception{
              //1.创建classPathResouce对象,用于加载配置文件
              ClassPathResource resource = new ClassPathResource("fdfs_client.conf");
              //2.初始化配置文件
              ClientGlobal.init(resource.getClassLoader().getResource("fdfs_client.conf").getPath());
              //3.获取跟踪服务器的客户端 
              TrackerClient trackerClient = new TrackerClient();
              //4.通过跟踪服务器的客户端获取服务端 
              TrackerServer trackerServer = trackerClient.getConnection();
              //5通过跟踪服务器的服务端获取存储服务器的客户端 
              StorageClient1 storageClient1 = new StorageClient1(trackerServer,null);
              //6.将附件上传至FastDFS
              String  file_ext_name=FilenameUtils.getExtension(filename);
              String path=storageClient1.upload_file1(file_buff, file_ext_name, null);
              return path;
          }
      }

      到此就完了,这只是一个初步fastDFS的用法,他到底有什么深入的功能还不是很懂,还有待研究,希望能同学能给够能予帮助提出

    • 前端使用jquery.form 是jquery提供的是一个很好用的js插件。更多使用可以查看官网或者其他的网站。

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-4-18 22:25 , Processed in 0.064731 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表