springboot上传文件到阿里云

springboot上传文件到阿里云springboot上传文件到OSS前提声明,文章借鉴了https://blog.csdn.net/wonder_dog/article/details/81152307#commentsedit博客,大神在我没有思路的时候提供了最简洁明了的教程,话不多说:写代码吧1.首先依赖:<dependency><groupId>com.aliyun.oss&…

大家好,又见面了,我是你们的朋友全栈君。

springboot上传文件到OSS

前提声明,文章借鉴了https://blog.csdn.net/wonder_dog/article/details/81152307#commentsedit博客,

大神在我没有思路的时候提供了最简洁明了的教程,话不多说:写代码吧

1.首先依赖:

 <dependency>
     <groupId>com.aliyun.oss</groupId>
     <artifactId>aliyun-sdk-oss</artifactId>
     <version>${oss.version}</version>
</dependency>

2.配置oss必备属性,这都是阿里云要求的:

他有个桶机制与存入阿里云的必备条件,带着这些条件就能进行上传

aliyun:
  oss:
    access-id:   你的id
    access-key:  你的key
    bucket:      你的buket
    endpoint:    你的endpoint
    dir:         设置文件存放文件夹 随便写  上传自动生成
    expire:      失效时间

写完配置 你需要一个类进行接收,

这里用了idea的一个插件 lombk ,使用data注解 不写getset方法了

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

@Configuration
@ConfigurationProperties("aliyun.oss")
@Data
public class AliyunOssProperties { 
   
    private String accessId;
    private String accessKey;
    private String bucket;
    private String endpoint;
    private String dir;
    private Integer maxSize = Integer.valueOf(1);
    private Integer expire = Integer.valueOf(30);
    private boolean secure = false;
    private String roleSessionName;

    public AliyunOssProperties() { 
   
    }

    
}

上传工具类:(这里就不讲了,主要还是关于Controller层的讲解)

Controller层:
整体思路:

1.Springmvc帮我们接受前端传递过来的文件

2.获取文件名

3.自定义文件名(这里其实就可以通过/来控制上传到OSS里的文件路径了)

4.将MultpaertFile格式转化成JAVA的File格式

5.调用OSS工具类上传,除了一些基础的必备参数,还需要File属性的文件和我们自定义的上传路径(也可以理解为我们自定义的图片格式)

6.删除在本地服务器的文件副本

 /** logo文件上传*/
    @PostMapping("/uploadFile")
    public String uploadBlog(@RequestParam("file") MultipartFile file) { 
   
        //获取原始文件名
        String filename = file.getOriginalFilename();
		//判断文件是否为空
        try { 
   
            File toFile = null;
            if (file!=null) { 
   
                
                //拼接/log
                StringBuilder path = new StringBuilder("log/");
                //获取时间戳
                Date fileDate = new Date();
                StringBuilder fileName = new StringBuilder(String.valueOf(fileDate.getTime()));
                //获取时间文件夹,并且与时间戳进行拼接
                SimpleDateFormat dateFormatShow = new SimpleDateFormat("yyyyMMdd");
                String date = (dateFormatShow.format(new Date()));
                StringBuilder newName = new StringBuilder(date);
                //拼接/log/时间文件夹/时间戳
                path.append(newName.toString());
                path.append("/");
                path.append(fileName);



                //获取文件后缀名
                String filename3 = file.getOriginalFilename();
                String extName = filename3.substring(filename3.lastIndexOf(".") );
                path.append(extName);
                System.out.println(path);
               // 将前面拼接的路径与文件名后缀进行拼接
               // 获得类似这样的结果/log/20190517/1558074106768.png
                String yuming1 = path.toString();
									
               //将springmvc的MultipartFile类型转换成File类型
               //并且获取输出流将传进来的文件以流的方式写入我们新建的File类型文件
                File newFile = new File(filename);
                FileOutputStream os = new FileOutputStream(newFile);
                os.write(file.getBytes());
                //记得关流
                os.close();
               // file.transferTo(newFile);这是另一个方法,上面的是通过java流的方法,这个是springmvc的方法,效率更高

                // 调用阿里云的工具类上传到OSS
                
               //这个工具类只需要我们传参就好,而我们所需要的路径,就是域名+我们之前自定义的阿里云里的文件夹路径
                //所以这个工具类是不会返回url的,图片的访问地址就是域名+我们之前自定义拼接的阿里云的文件夹路径
              //网上还有其他工具类,封装的好,这里只是提供一种实现思路
                OSSUploadUtil.uploadFile(ali_endpoint,ali_accesskey_id,ali_accesskey_secret,ali_logstorage,newFile,yuming1);

              // 删除上传的文件,我们这种方法上传文件会在本地服务器留下一个文件副本,需要调用上传方法进行删除
                File file1=new File(filename);
                String s = file1.getAbsolutePath();
                DeleteFileUtil.delete(s);



  //http://你们公司跟阿里云申请的域名 拼接上我们之前自定义的文件上传路径 /log/20190517/1218209821212.jpg
                //拼接域名:
                StringBuilder yuming= new StringBuilder("http://阿里云发给你们公司的域名前缀/");
                //再拼接你自定义的文件存储路径
                yuming.append(yuming1);
                //这样返回给前端的就是直接能访问的url了
              return (yuming.toString());
            }
            return FALSE;
        }
            catch (Exception ex) { 
   
            ex.printStackTrace();
                return FALSE;
        }

     }
}

删除上传图片后存在本地服务器的图片的工具类:

/** * 删除文件和目录 * */
public class DeleteFileUtil { 
   

    /** * 删除文件,可以是文件或文件夹 * * @param fileName * 要删除的文件名 * @return 删除成功返回true,否则返回false */
    public static boolean delete(String fileName) { 
   
        File file = new File(fileName);
        if (!file.exists()) { 
   
            System.out.println("删除文件失败:" + fileName + "不存在!");
            return false;
        } else { 
   
            if (file.isFile())
                return deleteFile(fileName);
            else
                return deleteDirectory(fileName);
        }
    }

    /** * 删除单个文件 * * @param fileName * 要删除的文件的文件名 * @return 单个文件删除成功返回true,否则返回false */
    public static boolean deleteFile(String fileName) { 
   
        File file = new File(fileName);
        // 如果文件路径所对应的文件存在,并且是一个文件,则直接删除
        if (file.exists() && file.isFile()) { 
   
            if (file.delete()) { 
   
                System.out.println("删除单个文件" + fileName + "成功!");
                return true;
            } else { 
   
                System.out.println("删除单个文件" + fileName + "失败!");
                return false;
            }
        } else { 
   
            System.out.println("删除单个文件失败:" + fileName + "不存在!");
            return false;
        }
    }

    /** * 删除目录及目录下的文件 * * @param dir * 要删除的目录的文件路径 * @return 目录删除成功返回true,否则返回false */
    public static boolean deleteDirectory(String dir) { 
   
        // 如果dir不以文件分隔符结尾,自动添加文件分隔符
        if (!dir.endsWith(File.separator))
            dir = dir + File.separator;
        File dirFile = new File(dir);
        // 如果dir对应的文件不存在,或者不是一个目录,则退出
        if ((!dirFile.exists()) || (!dirFile.isDirectory())) { 
   
            System.out.println("删除目录失败:" + dir + "不存在!");
            return false;
        }
        boolean flag = true;
        // 删除文件夹中的所有文件包括子目录
        File[] files = dirFile.listFiles();
        for (int i = 0; i < files.length; i++) { 
   
            // 删除子文件
            if (files[i].isFile()) { 
   
                flag = DeleteFileUtil.deleteFile(files[i].getAbsolutePath());
                if (!flag)
                    break;
            }
            // 删除子目录
            else if (files[i].isDirectory()) { 
   
                flag = DeleteFileUtil.deleteDirectory(files[i]
                        .getAbsolutePath());
                if (!flag)
                    break;
            }
        }
        if (!flag) { 
   
            System.out.println("删除目录失败!");
            return false;
        }
        // 删除当前目录
        if (dirFile.delete()) { 
   
            System.out.println("删除目录" + dir + "成功!");
            return true;
        } else { 
   
            return false;
        }
    }

    public static void main(String[] args) { 
   
// // 删除单个文件
// String file = "c:/test/test.txt";
// DeleteFileUtil.deleteFile(file);
// System.out.println();
        // 删除一个目录
        String dir = "D:/home/web/upload/upload/files";
        DeleteFileUtil.deleteDirectory(dir);
// System.out.println();
// // 删除文件
// dir = "c:/test/test0";
// DeleteFileUtil.delete(dir);

    }

}


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/133161.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 微信公众号开发(一)服务器及接口的配置

    微信公众号开发(一)服务器及接口的配置微信公众号开发(一)服务器及接口的配置关于微信公众号中的订阅号和服务的区别这里不多加讨论,网上有很多资源可以搜到,这里直接进入正题,如果是个人开发者,这里建议使用测试号进行开发学习,测试号的权限要比个人订阅号要多的多,而本篇博客也是基于测试号进行开发的。在开始微信号开发之前需要准备好两样东西,1、需要一个测试号,2、需要一个拥有域名的服务器,下面将分别介绍怎样获取这两样东西。1、…

    2022年6月6日
    65
  • linux常见问题_linux安装方式

    linux常见问题_linux安装方式Normal07.8磅02falsefalsefalseMicrosoftInternetExplorer4

    2022年8月21日
    2
  • 安全日志审计系统服务器,日志审计服务器「建议收藏」

    安全日志审计系统服务器,日志审计服务器「建议收藏」日志审计服务器内容精选换一换本地使用远程桌面连接登录Windowsserver2012云服务器,报错:122.112…,服务器频繁掉线,Windows登录进程意外中断。系统资源不足或不可用。服务启动失败。通过VNC方式登录云服务器。单击打开服务管理,选择“管理工具>事件查看器>Windows日志>系统>筛选当前日志”。事件查看器在“事件级别”负载均…

    2022年6月4日
    103
  • 谷歌的变种murmurHash算法

    谷歌的变种murmurHash算法谷歌变种murmurHash的编写与测试#include#include#include#include#include#include#includeusingnamespacestd;boolCheckLittleEndin();uint32

    2022年10月19日
    0
  • Xray使用的经验分享(xray+burp的使用[套娃测试])

    Xray使用的经验分享(xray+burp的使用[套娃测试])xray是一种功能强大的扫描工具。xray社区版是长亭科技推出的免费白帽子工具平台,由多名经验丰富的安全开发者和数万名社区贡献者共同打造而成。有趣的功能自己的安全评估工具,,支持常见的web安全问题扫描和自定义po

    2022年5月28日
    137
  • 自监督学习(一)自监督学习介绍

    自监督学习(一)自监督学习介绍自监督学习OverviewWhatisSelf-SupervisedLearning?WhyisSelf-SupervisedLearning?SomeExamplesUnsupervisedVisualRepresentationLearningbyContextPredictionUnsupervisedRepresentationLearningbyPred…

    2022年9月14日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号