当前位置:   article > 正文

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

上传图片在服务器

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

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

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

  1. /**
  2. * @description:服务器常量类
  3. */
  4. public class ServerConstant {
  5. // 端口号
  6. public static final int PORT = 22;
  7. // 用户名
  8. public static final String USER = "root";
  9. // 密码
  10. public static final String PASSWORD = "xingzhou";
  11. // ip地址
  12. public static final String IP = "192.168.168.121";
  13. // 服务器保存路径
  14. public static final String FILEPATH = "../usr/image/";
  15. // 服务器访问域名(没有域名可使用ip地址访问)
  16. public static final String RETURN_URL = "https://xz.xingzhou.com.cn/image/";
  17. }

3、上传图片工具类代码

  1. /**
  2. * @description:上传图片工具类
  3. */
  4. public class UploadUtils{
  5. /**
  6. * SFTP上传图片
  7. * @param bytes 图片字节流
  8. * @param fileName 图片名
  9. * @throws Exception
  10. * @return
  11. */
  12. public static String sftpImages(byte[] bytes, String fileName) throws Exception{
  13. String state = null;
  14. Session session = null;
  15. Channel channel = null;
  16. JSch jSch = new JSch();
  17. if(ServerConstant.PORT <=0){
  18. //连接服务器,默认端口
  19. session = jSch.getSession(ServerConstant.USER, ServerConstant.IP);
  20. }else{
  21. //连接服务器我们可以指定root用户、ip、端口号来上传图片
  22. session = jSch.getSession(ServerConstant.USER, ServerConstant.IP ,ServerConstant.PORT);
  23. }
  24. //session等于null说明服务器没连接,则抛出异常
  25. if (session == null) {
  26. throw new Exception("session is null");
  27. }
  28. //设置服务器登陆的密码
  29. session.setPassword(ServerConstant.PASSWORD);
  30. //设置第一次登陆的时候提示,可选值:(ask | yes | no)
  31. session.setConfig("userauth.gssapi-with-mic","no");
  32. session.setConfig("StrictHostKeyChecking", "no");
  33. //设置登陆超时时间
  34. session.connect(30000);
  35. OutputStream outstream = null;
  36. try {
  37. //创建sftp通信通道
  38. channel = (Channel) session.openChannel("sftp");
  39. channel.connect(1000);
  40. ChannelSftp sftp = (ChannelSftp) channel;
  41. //服务器存储图片的路径
  42. sftp.cd(ServerConstant.FILEPATH);
  43. //上传一个文件到服务器
  44. outstream = sftp.put(fileName);
  45. outstream.write(bytes);
  46. //访问路径http://192.168.168.121/image/拼接上图片名称.jpg
  47. state = ServerConstant.RETURN_URL + fileName;
  48. System.out.println("上传图片成功");
  49. } catch (Exception e) {
  50. e.printStackTrace();
  51. state = "上传失败";
  52. } finally {
  53. //关闭流
  54. if (outstream != null) {
  55. outstream.flush();
  56. outstream.close();
  57. }
  58. //断开服务器
  59. if (session != null) {
  60. session.disconnect();
  61. }
  62. //关闭信道
  63. if (channel != null) {
  64. channel.disconnect();
  65. }
  66. }
  67. return state;
  68. }
  69. /**
  70. * 将图片转换成字节流
  71. * @param images
  72. * @return
  73. * @throws Exception
  74. */
  75. public static byte[] imagesBytes(MultipartFile images) throws Exception {
  76. //将图片转换成文件名
  77. FileInputStream file = new FileInputStream(new File(imgSrc.getOriginalFilename()));
  78. //从一个输入流中读取一定数量的字节,并将这些字节存储到其缓冲作用的数组bytes中。
  79. byte[] bytes = new byte[file.available()];
  80. file.read(bytes);
  81. file.close();
  82. return bytes;
  83. }
  84. }

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

  1. /**
  2. * 上传图片
  3. * @param images
  4. * @return
  5. */
  6. @PostMapping("/uploadImage")
  7. public RespDTO upload(@RequestParam("images") MultipartFile images) {
  8. RespDTO respDTO = new RespDTO();
  9. String succeed = null;
  10. try {
  11. // 将图片转字节流方法
  12. byte[] bytes = UploadImage.image2Bytes(images);
  13. // 调用上传图片方法
  14. succeed = UploadImage.sshSftp(bytes, UUIDUtil.getUUID()+".jpg");
  15. respDTO.setObject(succeed);
  16. } catch (Exception e) {
  17. e.printStackTrace();
  18. respDTO.failed(succeed);
  19. }
  20. return respDTO;
  21. }

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

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

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

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

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/559453
推荐阅读
相关标签
  

闽ICP备14008679号