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入门到精通教程
查看: 316|回复: 0

summernote 上传图片到图片服务器的解决方案(springboot 成功)

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

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-5-12 14:34:37 | 显示全部楼层 |阅读模式

    遇到的可以连接成功但是拒绝登录的问题

    前提说一下,我自己在自己的服务器上配置了nginx的反向代理,所以请求的时候才会直接写的是我的ip地址,要配置nginx的话,可以看我的nginx的笔记

    当代码感觉没有问题的时候,但还是无法上传,首先问自己是不是被拒绝登陆了(还真是)

    这个问题是当你使用特定的用户的时候才会被拒绝请求

    可以在ftpusers & user_list 中把你用到的用户给注释掉(不建议这么干,不能保证安全性)

    1.首先检查系统是否开启了vsftp服务,如果没有开启,先开启该服务。
    
    2.查看配置
    
    vsftpd的配置,配置文件中限定了vsftpd用户连接控制配置。
    vsftpd.ftpusers:位于/etc/vsftpd目录下。它指定了哪些用户账户不能访问FTP服务器,例如root等。
    vsftpd.user_list:位于/etc/vsftpd目录下。该文件里的用户账户在默认情况下也不能访问FTP服务器,仅当vsftpd .conf配置文件里启用userlist_enable=NO选项时才允许访问。
    vsftpd.conf:位于/etc/vsftpd目录下。来自定义用户登录控制、用户权限控制、超时设置、服务器功能选项、服务器性能选项、服务器响应消息等FTP服务器的配置。
    
    3.配置修改完成后,执行service vsftpd restart重启vsftpd服务。
    

    下面是正式的代码

    前台代码

    用到的富文本编辑器是summernote前端代码如下

    用到的云服务器是阿里云的Centos 7

    window.onload = function () {
            var summernote = $('.summernote').summernote({
                lang: 'zh-CN',
                height: 300,
                minHeight: 300,
                placeholder: '请输入通知的内容',
                callbacks: { // 回调函数
                    // 上传图片时使用的回调函数
                    onImageUpload: function (files, editor, $editable) {
                        console.log(files)
                        sendFile(files[0], editor, $editable);
                    }
                },
              
            });
            
            function sendFile(files, editor, welEditable) {
                data = new FormData();
                data.append("file", files);
                $.ajax({
                    data: data,
                    type: "POST",
                    url: '/image/notice_add',
                    //请求路径
                    cache: false,
                    contentType: false,
                    processData: false,
                    dataType: "json",
                    success: function (data) {
                        alert(data.message)
                        // data.message
                        let url = 'http://xxx.xxx.xxx.xxx/';
                        //上面是服务器的地址
                        $('.summernote').summernote('insertImage',url+data.message);  
                        //xxx的地方是图片url的前缀 key为上传后图片的名字
                    },error:
                        function (url) {
                            alert(JSON.stringify(url.message))
                        }
                });
            }
    
    

    后台代码(springboot)

    首先是用到的工具类FtpFileUtil

    public class FtpFileUtil {
    
        //ftp服务器ip地址
        private static final String FTP_ADDRESS = "39.96.11.225";
        //端口号
        private static final int FTP_PORT = 21;
        //用户名 这里用到的是root 可以切合上面遇到的问题,实际开发中需要单独创建一个用户
        private static final String FTP_USERNAME = "root";
        //密码
        private static final String FTP_PASSWORD = "XXXXXXXXXX";
        //图片路径
        private static final String FTP_BASEPATH = "/soft/code/images";
    
        public  static boolean uploadFile(String originFileName, InputStream input){
            boolean success = false;
            FTPClient ftp = new FTPClient();
            ftp.setControlEncoding("GBK");
            try {
                int reply;
                ftp.connect(FTP_ADDRESS, FTP_PORT);// 连接FTP服务器
    
                ftp.login(FTP_USERNAME, FTP_PASSWORD);// 登录
    
                reply = ftp.getReplyCode();
                if (!FTPReply.isPositiveCompletion(reply)) {
                    ftp.disconnect();
    
                    return success;
                }
                ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
                ftp.makeDirectory(FTP_BASEPATH );
                ftp.changeWorkingDirectory(FTP_BASEPATH );
                ftp.storeFile(originFileName,input);
    
                input.close();
                ftp.logout();
                success = true;
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (ftp.isConnected()) {
                    try {
                        ftp.disconnect();
                    } catch (IOException ioe) {
                    }
                }
            }
            return success;
        }
    }
    

    上传比较大的图片的时候需要在springboot下配置ImageResolverConfig

    @Configuration
    public class ImageResolverConfig {
        @Bean
        public MultipartResolver multipartResolver() {
            CommonsMultipartResolver resolver=new CommonsMultipartResolver();
    //        resolver.setDefaultEncoding("utf-8");
            resolver.setMaxInMemorySize(1048576);
            resolver.setMaxUploadSize(20971520);
            return resolver;
        }
    }
    
    @RestController
    @RequestMapping("/image/")
    public class ImageUploadController {
    
        @ResponseBody
        @RequestMapping(value = "notice_add", headers = ("content-type=multipart/*"), method = RequestMethod.POST)
        public ResponseResult MyselfImageUpload(@RequestParam("file") CommonsMultipartFile file, HttpServletRequest request){
            try {
                String path = ImageUploadPathConstant.UPLOAD_PATH;
                String fileName = UUID.randomUUID().toString().replace("-", "") + file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
                // File destFile = new File(path + "/" + fileName);
                // FileUtils.copyInputStreamToFile(file.getInputStream(), destFile);
                //上面代码是拷贝到本地的,但是因为感觉并不人性化,所以采取了上传到图片服务器的思路
                InputStream inputStream=file.getInputStream();
    
                // String url = destFile.getAbsolutePath();
    
                String url = null;
                Boolean flag= FtpFileUtil.uploadFile(fileName,inputStream);
                if(flag){
                    url = fileName;
                }
    		//ResponseResult 是一个进行结果封装的类
               
                return  ResponseResult.success(url);
            }catch (Exception e){
                return  null;
            }
    
        }
    
    }
    

    ResponseResult //这个类可以不进行使用,但是为了系统的其他功能的使用,尽量加上。用于结果的封装

    public class ResponseResult {
    
        //状态码
        private int status;
    
        //消息
        private String message;
    
        //返回数据
        private Object data;
    
        public ResponseResult(int status, String message, Object data) {
            this.status = status;
            this.message = message;
            this.data = data;
        }
    
        //成功
        public static ResponseResult success(Object data) {
            return new ResponseResult(ResponseStatusConstant.RESPONSE_STATUS_SUCCESS, "success", data);
        }
    
        public static ResponseResult success(String message) {
            return new ResponseResult(ResponseStatusConstant.RESPONSE_STATUS_SUCCESS, message, null);
        }
    
        public static ResponseResult success() {
            return new ResponseResult(ResponseStatusConstant.RESPONSE_STATUS_SUCCESS, "success", null);
        }
    
        //失败
        public static ResponseResult fail() {
            return new ResponseResult(ResponseStatusConstant.RESPONSE_STATUS_FAIL, "fail", null);
        }
    
        public static ResponseResult fail(Object data) {
            return new ResponseResult(ResponseStatusConstant.RESPONSE_STATUS_FAIL, "fail", data);
        }
    
        public static ResponseResult fail(String message) {
            return new ResponseResult(ResponseStatusConstant.RESPONSE_STATUS_FAIL, message, null);
        }
    
        public int getStatus() {
            return status;
        }
    
        public void setStatus(int status) {
            this.status = status;
        }
    
        public String getMessage() {
            return message;
        }
    
        public void setMessage(String message) {
            this.message = message;
        }
    
        public Object getData() {
            return data;
        }
    
        public void setData(Object data) {
            this.data = data;
        }
    
    }
    
    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-20 01:27 , Processed in 0.070252 second(s), 30 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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