ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java向云服务器上传图片

2022-08-08 00:30:21  阅读:193  来源: 互联网

标签:向云 JSch java String 公网 null 上传 port


首先添加依赖

    <!--sftp文件上传-->
    <dependency>
      <groupId>com.jcraft</groupId>
      <artifactId>jsch</artifactId>
      <version>0.1.54</version>
    </dependency>

代码

    /**
     * 利用JSch包实现SFTP上传文件
     * @param bytes  文件字节流
     * @param fileName  文件名
     * @throws Exception
     */
    public static void sshSftp(byte[] bytes,String fileName) throws Exception{

        int port = 22;
        String user = "用户名";
        String password = "密码";
        String ip = "公网IP";
        // 服务器保存路径
        String filepath = "/home/image";
        Session session = null;
        Channel channel = null;

        JSch jSch = new JSch();

        if(port <=0){
            //连接服务器,采用默认端口
            session = jSch.getSession(user, ip);
        }else{
            //采用指定的端口连接服务器
            session = jSch.getSession(user, ip ,port);
        }

        //如果服务器连接不上,则抛出异常
        if (session == null) {
            throw new Exception("session is null");
        }

        //设置登陆主机的密码
        session.setPassword(password);//设置密码
        //设置第一次登陆的时候提示,可选值:(ask | yes | no)
        session.setConfig("userauth.gssapi-with-mic","no");
        session.setConfig("StrictHostKeyChecking", "no");
        //设置登陆超时时间
        session.connect(30000);

        OutputStream outstream = null;
        try {
            //创建sftp通信通道
            channel = (Channel) session.openChannel("sftp");
            channel.connect(1000);
            ChannelSftp sftp = (ChannelSftp) channel;


            //进入服务器指定的文件夹
            sftp.cd(filepath);

            //以下代码实现从本地上传一个文件到服务器,如果要实现下载,对换一下流就可以了
            outstream = sftp.put(fileName);
            outstream.write(bytes);

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //关流操作
            if (outstream != null) {
                outstream.flush();
                outstream.close();
            }
            if (session != null) {
                session.disconnect();
            }
            if (channel != null) {
                channel.disconnect();
            }
            System.out.println("上传成功!");
        }
    }

    //将图片转字节流
    public static byte[] image2Bytes(String imgSrc) throws Exception {
        FileInputStream file = new FileInputStream(new File(imgSrc));
        //可能溢出,简单起见就不考虑太多,如果太大就要另外想办法,比如一次传入固定长度byte[]
        byte[] bytes = new byte[file.available()];
        //将文件内容写入字节数组,提供测试的case
        file.read(bytes);
        file.close();
        return bytes;
    }



    public static void main(String[] args) {
        try {
            String srcUrl = "F:\\Projects\\Python\\bs\\images\\1833.jpeg";//本地路径
            File file = new File(srcUrl.trim());
            String fileName = file.getName();
            byte[] b =image2Bytes(srcUrl);
            sshSftp(b,fileName);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

上传完成后通过配置Nginx就可以将图片直接在公网被访问了,如果上传失败记得检查端口、用户名、密码这些有没有错误

标签:向云,JSch,java,String,公网,null,上传,port
来源: https://www.cnblogs.com/Arisf/p/16560345.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有