小程序、PC端图片上传到服务器详细步骤

1、导入sftp文件上传的依赖

<dependency>
    <groupId>com.jcraft</groupId>
    <artifactId>jsch</artifactId>
    <version>0.1.54</version>
</dependency>

2、创建了一个服务器的常量类,方便后期维护直接可以在常量类进行更改。

/**
 * @description:服务器常量类
 */
public class ServerConstant {
    // 端口号
    public static final int PORT = 22;
    // 用户名
    public static final String USER = "root";
    // 密码
    public static final String PASSWORD = "xingzhou";
    // ip地址
    public static final String IP = "192.168.168.121";
    // 服务器保存路径
    public static final String FILEPATH = "../usr/image/";
    // 服务器访问域名(没有域名可使用ip地址访问)
    public static final String RETURN_URL = "https://xz.xingzhou.com.cn/image/";
}

3、上传图片工具类代码

/**
 * @description:上传图片工具类
 */
public class UploadUtils{
    /**
     * SFTP上传图片
     * @param bytes  图片字节流
     * @param fileName  图片名
     * @throws Exception
     * @return
     */
    public static String sftpImages(byte[] bytes, String fileName) throws Exception{
        String state = null;
        Session session = null;
        Channel channel = null;
        JSch jSch = new JSch();
        if(ServerConstant.PORT <=0){
            //连接服务器,默认端口
            session = jSch.getSession(ServerConstant.USER, ServerConstant.IP);
        }else{
            //连接服务器我们可以指定root用户、ip、端口号来上传图片
            session = jSch.getSession(ServerConstant.USER, ServerConstant.IP ,ServerConstant.PORT);
        }
        //session等于null说明服务器没连接,则抛出异常
        if (session == null) {
            throw new Exception("session is null");
        }
        //设置服务器登陆的密码
        session.setPassword(ServerConstant.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(ServerConstant.FILEPATH);

            //上传一个文件到服务器
            outstream = sftp.put(fileName);
            outstream.write(bytes);
            //访问路径http://192.168.168.121/image/拼接上图片名称.jpg
            state = ServerConstant.RETURN_URL + fileName;
            System.out.println("上传图片成功");
        } catch (Exception e) {
            e.printStackTrace();
            state = "上传失败";
        } finally {
            //关闭流
            if (outstream != null) {
                outstream.flush();
                outstream.close();
            }
            //断开服务器
            if (session != null) {
                session.disconnect();
            }
            //关闭信道
            if (channel != null) {
                channel.disconnect();
            }
        }
        return state;
    }
    
    /**
     * 将图片转换成字节流
     * @param images
     * @return
     * @throws Exception
     */
    public static byte[] imagesBytes(MultipartFile images) throws Exception {
        //将图片转换成文件名
        FileInputStream file = new FileInputStream(new File(imgSrc.getOriginalFilename()));
        //从一个输入流中读取一定数量的字节,并将这些字节存储到其缓冲作用的数组bytes中。
        byte[] bytes = new byte[file.available()];
        file.read(bytes);
        file.close();
        return bytes;
    }
}

4、接下来我们用接口来测试一下,是否能够上传成功

/**
* 上传图片
* @param images
* @return
*/
@PostMapping("/uploadImage")
    public RespDTO upload(@RequestParam("images") MultipartFile images) {
        RespDTO respDTO = new RespDTO();
        String succeed = null;
        try {
            // 将图片转字节流方法
            byte[] bytes = UploadImage.image2Bytes(images);
            // 调用上传图片方法
            succeed = UploadImage.sshSftp(bytes, UUIDUtil.getUUID()+".jpg");
            respDTO.setObject(succeed);
        } catch (Exception e) {
            e.printStackTrace();
            respDTO.failed(succeed);
        }
        return respDTO;
    }

5、我用的是ApiPost6来测试的,可以看到发送请求已经操作成功。

 6、检查一下服务器路径是否已存储图片

 7、如果本地没有安装tomcat,可以直接写个main方法测

public class Test {

    public static void main(String[] args) {
        //从本地路径取图片测试
        File file = new File("D:\\jpg\\hehua.jpg");
        try {
            //直接把方法接收的参数改成File
            byte[] bytes = UploadImage.image2Bytes(file);
            String str = UploadImage.sshSftp(bytes, UUIDUtil.getUUID() + ".jpg");
            System.out.println(str);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

 8、图片都已经上传成功了,那么我们可以通过nginx.conf配置进行访问图片。

注意:配置完记得要重启nginx才能生效。重启命令:systemctl restart nginx

  创作不易,动动你发财的小手,赞有余香!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

行舟、668

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值