精华内容
下载资源
问答
  • 最近项目测试阶段,在Aliyun OSS上存储了很多测试上传的文件,由于文件较多,即使使用Oss Brower,删起来也不方便,因此就想着写个工具,方便对OSS上的文件进行删除操作。 正文 1.新建工程,导入工具包 新建VS控制台...

    前言

    最近项目测试阶段,在Aliyun OSS上存储了很多测试上传的文件,由于文件较多,即使使用Oss Brower,删起来也不方便,因此就想着写个工具,方便对OSS上的文件进行删除操作。

    正文

    1.新建工程,导入工具包

    新建VS控制台工程,安装NuGet工具包,注意不要选错工具包,如果选择上面的Aliyun.OSS.SDK.NetCore,在调用ListBuckets等查询接口时,会报异常:“无法发送具有此谓词类型的内容正文”,具体请看我写的这篇文章C# Aliyun OSS 获取Bucket列表异常:无法发送具有此谓词类型的内容正文
    在这里插入图片描述

    2.使用建表符,使界面更加友好,任意时刻按Q/q可退出程序

    using Aliyun.OSS;
    using System;
    using System.Collections.Generic;
    
    //一些全局变量
    private string m_DefaultEndpoint = "<your endpoint>";
    private string m_DefaultAccessKeyId = "<your accesskeyid>";
    private string m_DefaultAccessKeySecret = "<your accesskeysecret>";
    
    private string m_Endpoint;
    private string m_AccessKeyId;
    private string m_AccessKeySecret;
    
    IEnumerable<Bucket> buckets;
    private string m_BucketName;
    
    private string m_Order;
    
    private OssClient m_OssClient;
    
    public void Run()
    {
        Console.WriteLine("┌─────────────────────────────────┐");
        Console.WriteLine("│  Ctrl+C 强制                       Press Q/q at any time to exit │");
        Console.WriteLine("│                                                                  │");
        Console.WriteLine("│                  Aliyun OSS Delete Program                       │");
        Console.WriteLine("│                                                                  │");
        Console.WriteLine($"│      EnpPoint: {m_DefaultEndpoint}              │");
        Console.WriteLine($"│      AccessKeyId: {m_DefaultAccessKeyId}                       │");
        Console.WriteLine($"│      AccessKeySecret: {m_DefaultAccessKeySecret}             │");
        Console.WriteLine("└─────────────────────────────────┘");
        Console.WriteLine("");
    
        Login();
    }
    private string GetOrder()
    {
        string input = Console.ReadLine().Trim();
        if (input.Equals("Q") || input.Equals("q"))
        {
            Console.WriteLine("");
            Console.WriteLine("Press any key to close.");
            Console.ReadKey();
            Environment.Exit(0);
            return null;
        }
        else
        {
            return input;
        }
    
    }
    

    3.创建OssClient,并拉取Bucket列表

    private void Login()
    {
        while (true)
        {
            Console.Write("Use the default AK ? (Y/N): ");
            m_Order = GetOrder();
            if (m_Order.Equals("Y") || m_Order.Equals("y"))
            {
                m_Endpoint = m_DefaultEndpoint;
                m_AccessKeyId = m_DefaultAccessKeyId;
                m_AccessKeySecret = m_DefaultAccessKeySecret;
                break;
            }
            else if (m_Order.Equals("N") || m_Order.Equals("n"))
            {
                Console.Write("Please enter the Enppoint: ");
                m_Order = GetOrder();
                if (!string.IsNullOrEmpty(m_Order))
                {
                    m_Endpoint = m_Order;
                }
    
                Console.Write("Please enter the AccessKeyId: ");
                m_Order = GetOrder();
                if (!string.IsNullOrEmpty(m_Order))
                {
                    m_AccessKeyId = m_Order;
                }
    
                Console.Write("Please enter the AccessKeySecret: ");
                m_Order = GetOrder();
                if (!string.IsNullOrEmpty(m_Order))
                {
                    m_AccessKeySecret = m_Order;
                }
                break;
            }
            else
            {
                CLog.LogLine(CLog.LogType.Error, "Input Error!");
            }
        }
        m_OssClient = new OssClient(m_Endpoint, m_AccessKeyId, m_AccessKeySecret);
    
        try
        {
            buckets = m_OssClient.ListBuckets();
            BucketOperation();
        }
        catch (Exception ex)
        {
            CLog.Log(CLog.LogType.Error, "Login Failed: ");
            CLog.LogLine(CLog.LogType.Error, ex.Message);
    
            Console.Write("重新登陆?(Y/N): ");
            m_Order = GetOrder();
            if (m_Order.Equals("Y") || m_Order.Equals("y"))
            {
                Console.Clear();
                Run();
            }
        }
    }
    

    4. 列举拉取到的Bucket列表

    private void BucketOperation()
    {
        Console.WriteLine("");
        Console.WriteLine("────────────── Buckets List ──────────────");
        int index = 0;
        foreach (var bucket in buckets)
        {
            CLog.Log(CLog.LogType.Log, string.Format("{0,-30}", bucket.Name));
    
            index++;
            if (index % 3 == 0)
            {
                CLog.Log(CLog.LogType.Log, "\r\n");
            }
            else
            {
                CLog.Log(CLog.LogType.Log, "\t");
            }
        }
        Console.WriteLine("");
    
        while (true)
        {
            Console.Write("Please enter the bucket's name to delete: ");
            m_Order = GetOrder();
    
            if (DoesBucketExist(buckets, m_Order))
            {
                m_BucketName = m_Order;
                Console.WriteLine("");
                break;
            }
            else
            {
                CLog.LogLine(CLog.LogType.Error, $"Not Found the bucket: {m_Order}");
            }
        }
    
        ObjectsOperation();
    }
    private bool DoesBucketExist(IEnumerable<Bucket> bucketList, string bucketName)
    {
        foreach (var bucket in bucketList)
        {
            if (bucket.Name.Equals(bucketName))
            {
                return true;
            }
        }
        return false;
    }
    

    5. 判断要删除Bucket中的全部Object,还是某个Object

    private void ObjectsOperation()
    {
        while (true)
        {
            Console.Write("Delete All Objects ? (Y/N): ");
            m_Order = GetOrder();
            if (m_Order == "Y" || m_Order == "y")
            {
                DeleteAllOjbects();
                break;
            }
            else if (m_Order == "N" || m_Order == "n")
            {
                DeleteObject();
                break;
            }
            else
            {
                CLog.LogLine(CLog.LogType.Error, "Input Error!");
            }
        }
    }
    

    6. 删除Bucket中的全部Object

    private void DeleteAllOjbects()
    {
        Console.WriteLine("");
        Console.WriteLine("───────────── Delete Objects ──────────────");
        try
        {
            int delMaxKeys = 10;
            int delCount = 0;
            List<string> keys = new List<string>(delMaxKeys);
            while (true)
            {
                var listObjectsRequest = new ListObjectsRequest(m_BucketName)
                {
                    // 默认100,最大返回1000条记录。
                    MaxKeys = delMaxKeys,
                };
                var objectsList = m_OssClient.ListObjects(listObjectsRequest);
    
                keys.Clear();
                foreach (var summary in objectsList.ObjectSummaries)
                {
                    keys.Add(summary.Key);
                }
                if (keys.Count == 0)
                {
                    ClearConsoleLine(0);
                    Console.WriteLine($"{delCount++} items have been deleted.");
                    Console.WriteLine("All objects have been deleted.");
                    break;
                }
                DeleteObjectsRequest request = new DeleteObjectsRequest(m_BucketName, keys, false);
                DeleteObjectsResult result = m_OssClient.DeleteObjects(request);
    
                DeleteObjectsResult.DeletedObject[] deletedKeys = result.Keys;
                int count = deletedKeys.Length;
                for (int i = 0; i < count; i++)
                {
                    ClearConsoleLine(0);
                    Console.Write($"{delCount++} items have been deleted. Deleting: {deletedKeys[i]}");
                }
            }
        }
        catch (Exception ex)
        {
            CLog.LogLine(CLog.LogType.Error, $"[ERROR]: {ex.Message}");
        }
    }
    private void ClearConsoleLine(int lineBefore)
    {
        int currentLineCursor = Console.CursorTop;
        Console.SetCursorPosition(0, Console.CursorTop - lineBefore);
        Console.Write(new string(' ', Console.WindowWidth));
        Console.SetCursorPosition(0, currentLineCursor - lineBefore);
    }
    

    7. 删除Bucket中的某个Object

    private void DeleteObject()
    {
        Console.WriteLine("");
        Console.WriteLine("───────────── Delete  Object ──────────────");
    
        string objectName = "";
        while (true)
        {
            Console.Write("Please enter the object's name to delete: ");
            m_Order = GetOrder();
    
            if (m_OssClient.DoesObjectExist(m_BucketName, m_Order))
            {
                objectName = m_Order;
                break;
            }
            else
            {
                CLog.LogLine(CLog.LogType.Error, "The object is not exist!");
            }
            m_OssClient.DeleteObject(m_BucketName, objectName);
            Console.WriteLine($"Deleted: {m_BucketName}/{objectName}");
        }
    }
    

    8. 运行测试

    删除单个文件
    在这里插入图片描述删除全部文件在这里插入图片描述

    非常好用

    点赞、收藏、+关注哦

    展开全文
  • 阿里云OSS文件上传

    2021-01-13 14:52:18
    阿里云OSS文件上传 一:配置文件 oss.access-key-id=LTAI4FyJwuoVLR oss.access-key-secret=Tm6WT5bQAP93DOx9Zo4h oss.end-point=http://oss-cn-demo.aliyuncs.com oss.bucket-name=crm-follow aliyun.oss.maxSize=...

    阿里云OSS文件上传

    一:配置文件

    oss.access-key-id=LTAI4FyJwuoVLR
    oss.access-key-secret=Tm6WT5bQAP93DOx9Zo4h
    oss.end-point=http://oss-cn-demo.aliyuncs.com
    oss.bucket-name=crm-follow
    aliyun.oss.maxSize=10
    aliyun.oss.default.path=health-oss
    aliyun.oss.file.max.length=52428800
    aliyun.oss.url.prefix=demo.oss-cn-demo.aliyuncs.com
    

    二:OSSClientFactory

    package com.ellis.hospital.common.factory;
    
    import com.aliyun.oss.OSS;
    import com.aliyun.oss.OSSClientBuilder;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Configuration;
    
    import javax.annotation.PostConstruct;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    
    @Configuration
    public class OSSClientFactory {
        private static Logger logger = LoggerFactory.getLogger(OSSClientFactory.class);
    
        private static OSS client = null;
    
        /**
         * 上去文件的阿里云服务器地址
         */
        @Value("${oss.end-point}")
        private String endpoint;
    
        /**
         * accessKeyID
         */
        @Value("${oss.access-key-id}")
        private String accessKeyID;
    
        /**
         * accessKeySecret
         */
        @Value("${oss.access-key-secret}")
        private String accessKeySecret;
    
        /**
         * 存储名称
         */
        @Value("${oss.bucket-name}")
        private String bucketName;
    
        /**
         * 默认的路径
         */
        @Value("${aliyun.oss.default.path}")
        private String defaultPath;
    
        /**
         * 默认的路径
         */
        @Value("${aliyun.oss.url.prefix}")
        private String prefixPath;
    
        /**
         * 可以支持的文件类型 初始化的时候会有默认的几个文件类型
         */
        private List<String> fileType = new ArrayList<String>(Arrays.asList(
                "jpg", "JPG", "png", "PNG", "gif", "GIF", "jpeg", "JPEG", "bmp",
                "BMP", "apk", "APK", "xlsx", "pdf"));
    
        /**
         * 上传文件的最大长度,字节为单位1kb=1024 默认为50MB=1024*1024*50
         */
        private long fileMaxLength = 52428800L;
    
        /**
         * 获得单例上传ossClient
         *
         * @return
         */
        @PostConstruct
        public OSS getInstanceone() {
            if (null == client) {
                client = new OSSClientBuilder().build(endpoint, accessKeyID,
                        accessKeySecret);
                // client = new OSSClient(endpoint,accessKeyID,accessKeySecret);
                logger.info("CreateOSSClient success.--endpoint:" + endpoint
                        + "--bucketName:" + bucketName + "--defaultPath:"
                        + defaultPath);
            }
            return client;
        }
    
        /**
         * 创建一个新的ossClient
         *
         * @param ossClientEndPoint
         * @param accessKeyID
         * @param accessKeySecret
         * @return
         */
        public OSS createNewClient(String ossClientEndPoint, String accessKeyID,
                                   String accessKeySecret) {
            return new OSSClientBuilder().build(ossClientEndPoint.trim(),
                    accessKeyID.trim(), accessKeySecret.trim());
        }
    
        /**
         * @return the endpoint
         */
        public String getEndpoint() {
            return this.endpoint;
        }
    
        /**
         * @param endpoint the endpoint to set
         */
        public void setEndpoint(String endpoint) {
            this.endpoint = endpoint;
        }
    
        /**
         * @return the accessKeyID
         */
        public String getAccessKeyID() {
            return this.accessKeyID;
        }
    
        /**
         * @param accessKeyID the accessKeyID to set
         */
        public void setAccessKeyID(String accessKeyID) {
            this.accessKeyID = accessKeyID;
        }
    
        /**
         * @return the accessKeySecret
         */
        public String getAccessKeySecret() {
            return this.accessKeySecret;
        }
    
        /**
         * @param accessKeySecret the accessKeySecret to set
         */
        public  void setAccessKeySecret(String accessKeySecret) {
            this.accessKeySecret = accessKeySecret;
        }
    
        /**
         * @return the bucketName
         */
        public String getBucketName() {
            return bucketName;
        }
    
        /**
         * @param bucketName the bucketName to set
         */
        public void setBucketName(String bucketName) {
            this.bucketName = bucketName;
        }
    
        /**
         * @return the defaultPath
         */
        public  String getDefaultPath() {
            return this.defaultPath;
        }
    
        /**
         * @param defaultPath the defaultPath to set
         */
        public void setDefaultPath(String defaultPath) {
            this.defaultPath = defaultPath;
        }
    
        /**
         * @return the fileType
         */
        public  List<String> getFileType() {
            return fileType;
        }
    
        /**
         * @param fileType the fileType to set
         */
        public void setFileType(List<String> fileType) {
            this.fileType = fileType;
        }
    
        /**
         * @return the fileMaxLength
         */
        public long getFileMaxLength() {
            return fileMaxLength;
        }
    
        /**
         * @param fileMaxLength the fileMaxLength to set
         */
        public void setFileMaxLength(long fileMaxLength) {
            this.fileMaxLength = fileMaxLength;
        }
    
        public String getPrefixPath(){
            return this.prefixPath;
        }
    }
    

    三:OSSClientUtil

    package com.ellis.hospital.common.util;
    
    import com.alibaba.fastjson.JSON;
    import com.aliyun.oss.OSS;
    import com.aliyun.oss.model.PutObjectResult;
    import com.ellis.hospital.common.factory.OSSClientFactory;
    import org.apache.commons.lang3.StringUtils;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.stereotype.Component;
    
    import javax.annotation.Resource;
    import java.io.File;
    import java.io.InputStream;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.UUID;
    
    /**
     * OSS文件上传
     * @author liwenqiang
     * @date 2021年1月13日13:41:44
     */
    @Component
    public class OSSClientUtil {
        private final static Logger logger = LoggerFactory.getLogger(OSSClientUtil.class);
    
        @Resource
        private OSSClientFactory ossClientFactory;
    
        /**
         * @param localFile 本地绝对路径
         * @return String
         * @throws Exception e
         */
        public String uploadToImage(String localFile) throws Exception{
            return uploadToImage(new File(localFile));
        }
    
    
        public String uploadToImage(File localFile) throws Exception{
            // 上传文件大于最大文件数
            if (localFile.length() > ossClientFactory.getFileMaxLength()) {
                throw new RuntimeException("文件大小超出了系统最大文件大小,系统最大文件大小:" + ossClientFactory.getFileMaxLength());
            }
            String localFilePath = localFile.getPath();
            // 获取扩展名字
            String extensionName = getExtensionName(localFilePath);
            // 文件扩展名不支持
            if (!ossClientFactory.getFileType().contains(extensionName)) {
                // 不支持的格式上传过来有可能是病毒或者木马进行删除操作
                localFile.delete();
                return null;
            }
            String ossDefaultPath = getOssDefaultPath(extensionName);
            final OSS ossClient = ossClientFactory.getInstanceone();
            PutObjectResult putObjectResult = ossClient.putObject(ossClientFactory.getBucketName(), ossDefaultPath, localFile);
            logger.info("putObjectResult:" + JSON.toJSONString(putObjectResult)
                    + "--ossDefaultPath:" + ossDefaultPath);
            return "/" + ossDefaultPath;
        }
    
        /**
         * 上传文件流到阿里云
         *
         * @param input         文件流
         * @param extensionName 文件扩展名
         * @return 文件访问路径
         */
        public String uploadToImage(InputStream input, String extensionName) {
            String ossDefaultPath = getOssDefaultPath(extensionName);
            return uploadToImage(input, extensionName, ossDefaultPath);
        }
    
        /**
         * 上传文件流到阿里云
         *
         * @param input          文件流
         * @param extensionName  文件扩展名
         * @param ossDefaultPath 上传的文件路径,可以做预生成
         * @return 文件访问路径
         */
        public String uploadToImage(InputStream input, String extensionName, String ossDefaultPath) {
            // 文件扩展名不支持
            if (!ossClientFactory.getFileType().contains(extensionName)) {
                // 不支持的格式上传过来有可能是病毒或者木马进行删除操作
                return null;
            }
            final OSS ossClient = ossClientFactory.getInstanceone();
            PutObjectResult putObjectResult = ossClient.putObject(ossClientFactory.getBucketName(), ossDefaultPath, input);
            logger.info("putObjectResult:" + JSON.toJSONString(putObjectResult)
                    + "--ossDefaultPath:" + ossDefaultPath);
            return "/" + ossDefaultPath;
        }
    
        /**
         * Java文件操作 获取文件扩展名
         *
         * @param filename
         * @return
         */
        public static String getExtensionName(String filename) {
            if ((filename != null) && (filename.length() > 0)) {
                int dot = filename.lastIndexOf('.');
                if ((dot > -1) && (dot < (filename.length() - 1))) {
                    return filename.substring(dot + 1);
                }
            }
            return filename;
        }
    
        /**
         * 获取oss存储的默认路径
         *
         * @param extensionName 扩展名
         * @return
         */
        public String getOssDefaultPath(String extensionName) {
            return getOssDefaultPath(extensionName, null);
        }
    
        /**
         * 获取oss存储的默认路径
         *
         * @param extensionName
         * @return
         */
        public String getOssDefaultPath(String extensionName, int height, int width) {
            Date date = new Date();
            StringBuilder sb = new StringBuilder();
            OSSClientFactory ossClientFactory = new OSSClientFactory();
            sb.append(ossClientFactory.getDefaultPath());
            sb.append("/");
            sb.append(DateUtil.DateToStr(date, "yyyy"));
            sb.append("/");
            sb.append(DateUtil.DateToStr(date, "MM"));
            sb.append("/");
            sb.append(DateUtil.DateToStr(date, "dd"));
            sb.append("/");
            sb.append(UUID.randomUUID().toString().substring(0, 8));
            sb.append("_h_" + height);
            sb.append("_w_" + width);
            sb.append(".");
            sb.append(extensionName);
            return sb.toString();
        }
    
        /**
         * 获取oss存储的默认路径
         *
         * @param extensionName
         * @return
         */
        public String getOssDefaultPath(String extensionName, String fileName) {
            Date date = new Date();
            String defaultPath = ossClientFactory.getDefaultPath() + "/" + DateUtil.DateToStr(date, "yyyy") + "/"
                    + DateUtil.DateToStr(date, "MM") + "/" + DateUtil.DateToStr(date, "dd") + "/";
    
            if (StringUtils.isBlank(fileName)) {
                fileName = UUID.randomUUID().toString().substring(0, 8);
            }
    
            String ossDefaultPath = defaultPath + fileName + "." + extensionName;
            return ossDefaultPath;
        }
    
        /**
         * 封装图片的大小
         *
         * @param imagePath 图片路径
         * @param height    高度
         * @param width     宽度
         * @return
         */
        public static String formatImageResize(String imagePath, int height, int width) {
            String newImagePath = imagePath;
            if (StringUtils.isNotBlank(imagePath)) {
                newImagePath = imagePath + "?x-oss-process=image/resize,m_fixed,h_" + height + ",w_" + width;
            }
            return newImagePath;
        }
    
        /**
         * 获取视频指定时间的图片
         *
         * @param imagePath   视频路径
         * @param millisecond 截图时间
         * @param height      截图高度,如果指定为0则自动计算,如果w和h都为0则输出为原视频宽高
         * @param width       截图宽度,如果指定为0则自动计算
         * @return 例如:http://a-image-demo.oss-cn-qingdao.aliyuncs.com/demo.mp4?x-oss-process=video/snapshot,t_50000,f_jpg,w_800,h_600
         */
        public static String getVideoImage(String imagePath, int millisecond, int height, int width) {
            String newImagePath = imagePath;
            if (StringUtils.isNotBlank(imagePath)) {
                newImagePath = imagePath + "x-oss-process=video/snapshot,t_" + millisecond + ",f_jpg,w_" + width + ",h_" + height;
            }
            return newImagePath;
        }
    
        /**
         * 获取图片的详细信息
         *
         * @param imagePath
         * @return {"ColorSpace":{"value":"1"},"ExifTag":{"value":"38"},"FileSize":{"value":"185296"},"Format":{"value":"jpg"},"ImageHeight":{"value":"1104"},"ImageWidth":{"value":"828"},"Orientation":{"value":"1"},"PixelXDimension":{"value":"828"},"PixelYDimension":{"value":"1104"}}
         */
        public static String getImageInfo(String imagePath) {
            imagePath = imagePath + "?x-oss-process=image/info";
    
            String imageInfo = HTTPUtil.sendGet(imagePath, "", new HashMap<String, String>());
            return imageInfo;
        }
    
        public static String getFileInfo(String imagePath) {
            imagePath = imagePath + "?x-oss-process=file/info";
            String imageInfo = HTTPUtil.sendGet(imagePath, "", new HashMap<String, String>());
            return imageInfo;
        }
    
        public static String setImagePath(String imgUrl, String imagePath, int height, int width, int q) {
            return imgUrl + imagePath + "?x-oss-process=image/resize,m_fixed,h_" + height + ",w_" + width + "/quality,q_" + q;
        }
    
    }
    

    四:用到的工具类

    DateUtil

    package com.ellis.hospital.common.util;
    
    import cn.hutool.core.util.StrUtil;
    
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.time.*;
    import java.time.format.DateTimeFormatter;
    import java.time.temporal.ChronoUnit;
    import java.time.temporal.TemporalAdjusters;
    import java.time.temporal.WeekFields;
    import java.util.*;
    import java.util.stream.Stream;
    
    
    /**
     * 日期类型转换类
     */
    public class DateUtil {
        //数据库格式的日期
        public static final String SQL_MONTH = "yyyy-MM";
        public static final String SQL_DATE = "yyyy-MM-dd";
        public static final String SQL_TIME = "yyyy-MM-dd HH:mm:ss";
        public static final String SQL_TIMESTAMP = "yyyy-MM-dd HH:mm:ss.SS";
    
        //斜杠格式的日期
        public static final String DATE = "yyyy/MM/dd";
        public static final String TIMESTAMP = "yyyy/MM/dd HH:mm:ss.SS";
        public static final String TIMESTAMP_SHORT = "yyyy/MM/dd HH:mm";
        public static final String TIME = "HH:mm:ss";
        public static final String TIME_SHORT = "HH:mm";
    
        //不常用日期格式
        public static final String CHINESEDATE = "yyyy年MM月dd日";
        public static final String DATE_TIME = "yyyyMMddHHmmss";
        public static final String DATE_TIME_DETAIL = "yyyyMMddHHmmssSS";
        public static final String DATE_DAY = "yyyyMMdd";
        public static final String DATE_HOUR = "yyyyMMddHH";
        public static final String DATE_MONTH = "yyyyMM";
        public static final String DATE_MONTH_DAY = "MM/dd";
    
        public static ZoneId zoneId = ZoneId.of("GMT+8");
    
        /**
         * 防止被实例化
         */
        private DateUtil() {
    
        }
    
        /**
         * Date转LocalDateTime
         * 使用系统时区
         *
         * @param date
         * @return
         */
        public static LocalDateTime dateToLocalDateTime(Date date) {
            Instant instant = date.toInstant();
            return instant.atZone(ZoneId.systemDefault()).toLocalDateTime();
        }
    
        public static LocalDate dateToLocalDate(Date date) {
            Instant instant = date.toInstant();
            return instant.atZone(ZoneId.systemDefault()).toLocalDate();
        }
    
        /**
         * LocalDateTime转Date
         * 使用系统时区
         *
         * @param localDateTime
         * @return
         */
        public static Date localDateTimeToDate(LocalDateTime localDateTime) {
            ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault());
            return Date.from(zdt.toInstant());
        }
    
        /**
         * 日期转字符串
         *
         * @param localDateTime
         * @param pattern
         * @return
         */
        public static String dateTimeToStr(LocalDateTime localDateTime, String pattern) {
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
            return localDateTime.format(formatter);
        }
    
        /**
         * 将字符串日期解析为java.time.LocalDateTime
         *
         * @param dateTimeStr
         * @param pattern
         * @return
         */
        public static LocalDateTime strToLocalDateTime(String dateTimeStr, String pattern) {
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
            return LocalDateTime.parse(dateTimeStr, formatter);
        }
    
        /**
         * 将字符串日期解析为java.time.strToLocalDate
         *
         * @param dateStr
         * @param pattern
         * @return
         */
        public static LocalDate strToLocalDate(String dateStr, String pattern) {
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
            return LocalDate.parse(dateStr, formatter);
        }
    
        /**
         * 开始日期,补齐" 00:00:00"
         *
         * @param localDateTime
         * @return
         */
        public static LocalDateTime getStartDateTimeWithHMS(LocalDateTime localDateTime) {
            return LocalDateTime.of(localDateTime.toLocalDate(), LocalTime.MIN);
        }
    
        /**
         * LocalDate 转 时间戳
         * @param localDate
         * @return
         */
        public static String localDate2TimeStampStr(LocalDate localDate) {
            return localDate2TimeStamp(localDate) + "";
        }
    
        /**
         * LocalDate 转 时间戳
         * @param localDate
         * @return
         */
        public static Long localDate2TimeStamp(LocalDate localDate) {
            return localDate.atStartOfDay(ZoneOffset.ofHours(8)).toInstant().toEpochMilli();
        }
    
        /**
         * LocalDate 转 LocalDateTime
         */
        public static LocalDateTime localDate2LocalDateTime(LocalDate localDate){
            return LocalDateTime.of(localDate,LocalTime.parse("00:00:00"));
        }
    
        /**
         * LocalDateTime 转 时间戳
         * @param localDateTime
         * @return
         */
        public static Long localDateTime2TimeStamp(LocalDateTime localDateTime) {
            return localDateTime.toInstant(ZoneOffset.of("+8")).toEpochMilli();
    
        }
    
        /**
         * 结束日期,补齐" 23:59:59"
         *
         * @param localDateTime
         * @return
         */
        public static LocalDateTime getEndDateWithHMS(LocalDateTime localDateTime) {
            return LocalDateTime.of(localDateTime.toLocalDate(), LocalTime.MAX);
        }
    
        public static Date parse(String date) {
            return parse(date, SQL_TIME);
        }
    
        public static Date parse(String date, String format) {
            if (StrUtil.isNotBlank(date)) {
                return null;
            } else {
                SimpleDateFormat sdf = new SimpleDateFormat(format);
    
                try {
                    return sdf.parse(date);
                } catch (ParseException var4) {
                    return null;
                }
            }
        }
    
        /**
         * 系统当前时间戳字符串
         */
        public static Date currentDate() {
            return Date.from(LocalDateTime.now().atZone(zoneId).toInstant());
        }
    
        public static LocalDateTime getAfterYears(LocalDateTime localDateTime, int count) {
            return localDateTime.plusYears(count);
        }
    
        public static LocalDateTime getAfterMonths(LocalDateTime localDateTime, int count) {
            return localDateTime.plusMonths(count);
        }
    
        public static LocalDateTime getAfterDays(LocalDateTime localDateTime, int count) {
            return localDateTime.plusDays(count);
        }
    
        public static LocalDateTime getAfterMinutes(LocalDateTime localDateTime, int count) {
            return localDateTime.plusMinutes(count);
        }
    
        public static LocalDateTime getAfterSeconds(LocalDateTime localDateTime, int count) {
            return localDateTime.plusSeconds(count);
        }
    
    
        /**
         * 获得当前年的第一天
         *
         * @param
         * @return
         */
        public static LocalDateTime getYearFirstDay(LocalDateTime localDateTime) {
            return localDateTime.with(TemporalAdjusters.firstDayOfYear());
        }
    
        /**
         * 获得当前年的最后一天
         *
         * @param
         * @return
         */
        public static LocalDateTime getYearLastDay(LocalDateTime localDateTime) {
            return localDateTime.with(TemporalAdjusters.lastDayOfYear());
        }
    
    
        /**
         * 获得当前月的第一天
         *
         * @param
         * @return
         */
        public static LocalDateTime getMonthFirstDay(LocalDateTime localDateTime) {
            return localDateTime.with(TemporalAdjusters.firstDayOfMonth());
        }
    
        /**
         * 获得当前月的最后一天
         *
         * @param
         * @return
         */
        public static LocalDateTime getMonthLastDay(LocalDateTime localDateTime) {
            return localDateTime.with(TemporalAdjusters.lastDayOfMonth());
        }
    
    
        /**
         * 获得当前星期的第一天
         *
         * @param localDateTime
         * @param locale        默认Locale.CHINA 周日为一周的第一天
         * @return
         */
        public static LocalDateTime getWeekFirstDay(LocalDateTime localDateTime, Locale locale) {
            return localDateTime.with(WeekFields.of(locale == null ? Locale.CHINA : locale).dayOfWeek(), 1);
        }
    
        /**
         * 获得当前星期的最后一天
         *
         * @param localDateTime
         * @param locale        默认默认Locale.CHINA 周日为一周的第一天
         * @return
         */
        public static LocalDateTime getWeekLastDay(LocalDateTime localDateTime, Locale locale) {
            return localDateTime.with(WeekFields.of(locale == null ? Locale.CHINA : locale).dayOfWeek(), 7);
        }
    
    
        /**
         * 计算两个日期之间相差年数
         *
         * @param smallDateTime 较小的时间
         * @param bigDateTime   较大的时间
         * @return 相差年数
         */
        public static int getYearDiff(LocalDateTime smallDateTime, LocalDateTime bigDateTime) {
            return (int) smallDateTime.until(bigDateTime, ChronoUnit.YEARS);
        }
    
        /**
         * 计算两个日期之间相差月数
         *
         * @param smallDateTime 较小的时间
         * @param bigDateTime   较大的时间
         * @return 相差月数
         */
        public static int getMonthDiff(LocalDateTime smallDateTime, LocalDateTime bigDateTime) {
            return (int) smallDateTime.until(bigDateTime, ChronoUnit.MONTHS);
        }
    
        /**
         * 计算两个日期之间相差的天数
         *
         * @param smallDateTime 较小的时间
         * @param bigDateTime   较大的时间
         * @return 相差天数
         */
        public static int getDayDiff(LocalDateTime smallDateTime, LocalDateTime bigDateTime) {
            return (int) smallDateTime.until(bigDateTime, ChronoUnit.DAYS);
        }
    
        /**
         * 计算两个日期之间相差小时数
         *
         * @param smallDateTime 较小的时间
         * @param bigDateTime   较大的时间
         * @return 相差小时数
         */
        public static int getHourDiff(LocalDateTime smallDateTime, LocalDateTime bigDateTime) {
            return (int) smallDateTime.until(bigDateTime, ChronoUnit.HOURS);
        }
    
        /**
         * 计算两个日期之间相差分钟数
         *
         * @param smallDateTime
         * @param bigDateTime
         * @return 相差分钟数
         */
        public static int getMinutesDiff(LocalDateTime smallDateTime, LocalDateTime bigDateTime) {
            return (int) smallDateTime.until(bigDateTime, ChronoUnit.MINUTES);
        }
    
        /**
         * 计算两个日期之间相差秒数
         *
         * @param smallDateTime
         * @param bigDateTime
         * @return 相差秒数
         */
        public static int getSecondsDiff(LocalDateTime smallDateTime, LocalDateTime bigDateTime) {
            return (int) smallDateTime.until(bigDateTime, ChronoUnit.SECONDS);
        }
    
        /**
         * 获取服务器时间的毫秒数
         *
         * @param
         * @return 返回服务器时间的毫秒数
         * @author zhangpingan
         * @author zhangpingan mrd Beidou2.0.0
         */
        public static long getTimeInMillionSeconds() {
            Calendar c = Calendar.getInstance();
            return c.getTimeInMillis();
        }
    
        /**
         * 获取年龄
         *
         * @param birthDay
         * @return
         */
        public static Integer getAge(LocalDateTime birthDay) {
            LocalDateTime now = LocalDateTime.now();
            if (birthDay != null){
                return now.getYear() - birthDay.getYear();
            }else {
                return 0;
            }
    
        }
    
        /**
         * 今天剩余的时间(秒)
         *
         * @return
         */
        public static long getTodayRemainSeconds() {
            LocalDateTime midnight = LocalDateTime.now().plusDays(1).withHour(0).withMinute(0).withSecond(0).withNano(0);
            return ChronoUnit.SECONDS.between(LocalDateTime.now(), midnight);
        }
    
    
        /**
         * 获取两个月份间隔的所有月份
         *
         * @param start 格式必须为'2018-01'
         * @param end   格式必须为'2018-01'
         * @return
         */
        public static List<String> getBetweenDate(String start, String end, String pattern, int type) {
            List<String> list = new ArrayList<>();
            long distance;
            if (type == 1){
                LocalDate startLocalDate = LocalDate.parse(start);
                LocalDate endLocalDate = LocalDate.parse(end);
                distance = ChronoUnit.DAYS.between(startLocalDate, endLocalDate);
                if (distance < 0) {
                    return list;
                }
                Stream.iterate(startLocalDate, d -> d.plusDays(1))
                        .limit(distance + 1).forEach(f -> list.add(f.format(DateTimeFormatter.ofPattern(pattern))));
            }else if (type == 2){
                YearMonth startYearMonth = YearMonth.parse(start);
                YearMonth endYearMonth = YearMonth.parse(end);
                distance = ChronoUnit.MONTHS.between(startYearMonth, endYearMonth);
                if (distance < 0) {
                    return list;
                }
                Stream.iterate(startYearMonth, d -> d.plusMonths(1))
                        .limit(distance + 1).forEach(f -> list.add(f.format(DateTimeFormatter.ofPattern(pattern))));
            }else if (type == 3){
                Year startYear = Year.parse(start);
                Year endYear = Year.parse(end);
                distance = ChronoUnit.YEARS.between(startYear, endYear);
                if (distance < 0) {
                    return list;
                }
                Stream.iterate(startYear, d -> d.plusYears(1))
                        .limit(distance + 1).forEach(f -> list.add(f.format(DateTimeFormatter.ofPattern(pattern))));
            }
            return list;
        }
    
        /**
         * LocalDate 转 Date
         *
         * @param localDate localDate
         * @return Date
         */
        public static Date localDateToDate(LocalDate localDate) {
            Instant instant = localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant();
            return Date.from(instant);
        }
    
        public static String DateToStr(Date date, String format) {
            try {
                SimpleDateFormat sdf = new SimpleDateFormat(format);
                return sdf.format(date);
            } catch (Exception e) {
                return null;
            }
        }
    }
    
    

    HTTPUtil

    package com.ellis.hospital.common.util;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import java.io.*;
    import java.net.URL;
    import java.net.URLConnection;
    import java.net.URLEncoder;
    import java.util.*;
    import java.util.Map.Entry;
    
    /**
     * @author : liwenqiang
     * @date 2021年1月13日10:37:45
     * @return
     */
    public class HTTPUtil {
        private static final Logger LOG = LoggerFactory.getLogger(HTTPUtil.class);
    
        /**
         * 向指定URL发送GET方法的请求
         * 
         * @param url
         *            发送请求的URL
         * @param param
         *            请求参数,请求参数是 name1=value1&name2=value2 的形式。
         * @return URL 所代表远程资源的响应结果
         */
        public static String sendGet(String url, String param,
                Map<String, String> headMap) {
            String result = "";
            BufferedReader in = null;
            try {
                String urlNameString = url + param;
                URL realUrl = new URL(urlNameString);
                // 打开和URL之间的连接
                URLConnection connection = realUrl.openConnection();
                // 设置通用的请求属性
                connection.setRequestProperty("accept", "*/*");
                connection.setRequestProperty("connection", "Keep-Alive");
                connection.setRequestProperty("user-agent",
                        "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
                connection.setConnectTimeout(10000);
                if (headMap != null) {
                    Iterator<Entry<String, String>> it = headMap.entrySet()
                            .iterator();
                    while (it.hasNext()) {
                        Entry<String, String> entry = it.next();
                        String key = entry.getKey();
                        String value = entry.getValue();
                        connection.setRequestProperty(key, value);
                    }
                }
                // 建立实际的连接
                connection.connect();
                // // 获取所有响应头字段
                // Map<String, List<String>> map = connection.getHeaderFields();
                // // 遍历所有的响应头字段
                // for (String key : map.keySet()) {
                // System.out.println(key + "--->" + map.get(key));
                // }
                // 定义 BufferedReader输入流来读取URL的响应
                in = new BufferedReader(new InputStreamReader(
                        connection.getInputStream()));
                String line;
                while ((line = in.readLine()) != null) {
                    result += line;
                }
            } catch (Exception e) {
                LOG.error("发送GET请求出现异常!", e);
            }
            // 使用finally块来关闭输入流
            finally {
                try {
                    if (in != null) {
                        in.close();
                    }
                } catch (Exception e2) {
                    e2.printStackTrace();
                }
            }
            return result;
        }
    
        /**
         * 向指定 URL 发送POST方法的请求
         * 
         * @param url
         *            发送请求的 URL
         * @param param
         *            请求参数
         * @return 所代表远程资源的响应结果
         */
        public static String sendPost(String url, String param,
                Map<String, String> headMap) {
            PrintWriter out = null;
            BufferedReader in = null;
            String result = "";
            try {
                URL realUrl = new URL(url);
                // 打开和URL之间的连接
                URLConnection conn = realUrl.openConnection();
                // 设置通用的请求属性
                conn.setRequestProperty("accept", "*/*");
                conn.setRequestProperty("connection", "Keep-Alive");
                conn.setRequestProperty("user-agent",
                        "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
                if (headMap != null) {
                    Iterator<Entry<String, String>> it = headMap.entrySet()
                            .iterator();
                    while (it.hasNext()) {
                        Entry<String, String> entry = it.next();
                        String key = entry.getKey();
                        String value = entry.getValue();
                        conn.setRequestProperty(key, value);
                    }
                }
                // 发送POST请求必须设置如下两行
                conn.setDoOutput(true);
                conn.setDoInput(true);
                // 获取URLConnection对象对应的输出流
                out = new PrintWriter(conn.getOutputStream());
                // 发送请求参数
                out.print(param);
                // flush输出流的缓冲
                out.flush();
                // 定义BufferedReader输入流来读取URL的响应
                in = new BufferedReader(
                        new InputStreamReader(conn.getInputStream()));
                String line;
                while ((line = in.readLine()) != null) {
                    result += line;
                }
            } catch (Exception e) {
                LOG.info("发送 POST 请求出现异常!", e);
            }
            // 使用finally块来关闭输出流、输入流
            finally {
                try {
                    if (out != null) {
                        out.close();
                    }
                    if (in != null) {
                        in.close();
                    }
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
            return result;
        }
    
        /**
         * 把数组所有元素排序,并按照“参数=参数值”的模式用“&”字符拼接成字符串
         * 
         * @param params
         *            需要排序并参与字符拼接的参数组
         * @return 拼接后字符串
         */
        public static String createLinkString(Map<String, Object> params) {
    
            List<String> keys = new ArrayList<String>(params.keySet());
            Collections.sort(keys);
    
            String prestr = "";
    
            for (int i = 0; i < keys.size(); i++) {
                String key = keys.get(i);
                String value = params.get(key).toString();
                if ("signature".equals(key)) {
                    try {
                        value = URLEncoder.encode(value, "utf-8");
                    } catch (UnsupportedEncodingException e) {
                        e.printStackTrace();
                    }
                }
                if (i == keys.size() - 1) {// 拼接时,不包括最后一个&字符
                    try {
                        prestr = prestr + key + "="
                                + URLEncoder.encode(value, "utf-8");
                    } catch (UnsupportedEncodingException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                } else {
                    try {
                        prestr = prestr + key + "="
                                + URLEncoder.encode(value, "utf-8") + "&";
                    } catch (UnsupportedEncodingException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
    
            return prestr;
        }
    }
    

    五:FileServiceImpl

    package com.ellis.hospital.biz.service;
    
    
    import org.springframework.web.multipart.MultipartFile;
    
    import java.io.File;
    import java.io.IOException;
    import java.io.InputStream;
    
    /**
     * 配置服务类
     *
     * @author nick
     */
    public interface FileService {
    
        /**
         * 上传文件
         *
         * @param fileName
         * @param inputStream
         * @param type  根据不同的业务类型,来存放到不同的子目录去
         * @return
         */
        String upload(String fileName, InputStream inputStream, String type) throws IOException;
    
    
    
        /**
         * 上传评估报告到阿里云
         *
         * @param file 文件
         * @return string
         */
        String fmsUpload(File file) ;
    
        /**
         * 上传文件
         * @param file
         * @return
         */
        String pictureUpload(MultipartFile file);
    }
    
    
    package com.ellis.hospital.biz.service.impl;
    
    import com.ellis.hospital.biz.service.FileService;
    import com.ellis.hospital.common.component.RedisService;
    import com.ellis.hospital.common.util.DateUtil;
    import com.ellis.hospital.common.util.FileUtil;
    import com.ellis.hospital.common.util.OSSClientUtil;
    import com.ellis.hospital.domain.enums.FileTypeEnum;
    import com.ellis.hospital.domain.exception.BizException;
    import lombok.extern.slf4j.Slf4j;
    import org.apache.commons.lang3.StringUtils;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    import org.springframework.web.multipart.MultipartFile;
    
    import javax.annotation.Resource;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.time.LocalDateTime;
    
    import static com.ellis.hospital.common.util.OSSClientUtil.getExtensionName;
    
    /**
     * application 配置类
     * 优先读取redis里的配置,找不到再读取property文件里的
     *
     * @author nick
     */
    @Component
    @Slf4j
    public class FileServiceImpl implements FileService {
    
        /**
         * 文件根目录
         */
        public static String FILE_UPLOAD_PATH;
    
    
        /**
         * 文件名分隔符
         */
        public static final String SPLIT = "_";
    
        /**
         * 文件夹分隔符
         */
        public static final String PATH_SYMBOL = "/";
    
        /**
         * 文件上传默认路径
         */
        public static final String FILE_UPLOAD_PATH_KEY = "file_upload_path";
    
        /**
         * HTTPS
         */
        public static final String HTTPS = "https://";
    
        @Value("${oss.bucket-name}")
        private String bucket;
    
        @Value("${aliyun.oss.maxSize}")
        private int ALIYUN_OSS_MAX_SIZE;
    
        @Value("${aliyun.oss.url.prefix}")
        private String prefix;
    
        @Resource
        private OSSClientUtil ossClientUtil;
    
        @Resource
        private RedisService redisService;
    
        /**
         * 文件上传路径
         *
         * @return
         */
        private String getFileUploadPath() {
            String dir = redisService.getString(FILE_UPLOAD_PATH_KEY);
            if (StringUtils.isNotEmpty(dir)) {
                return dir;
            }
    
            return FILE_UPLOAD_PATH;
        }
    
        /**
         * 上传文件
         * 上传路径:可配置的根目录/业务类型/年月/时间_文件名
         *
         * @param fileName
         * @param inputStream
         * @param type        FileTypeEnum.java
         * @return
         */
        @Override
        public String upload(String fileName, InputStream inputStream, String type) throws IOException {
            // 子文件夹目录
            String childFileDir = FileTypeEnum.getPathByType(type);
            // 以月份为单位建立文件夹
            LocalDateTime now = LocalDateTime.now();
            String date = DateUtil.dateTimeToStr(now, DateUtil.DATE_MONTH);
            String dateTime = DateUtil.dateTimeToStr(now, DateUtil.DATE_TIME);
    
            // 文件目录以:【业务类型/年月/】的形式建立存储
            String childDir = childFileDir + date + PATH_SYMBOL;
            String dir = getFileUploadPath() + childDir;
            File dirFile = new File(dir);
            // 如果文件夹不存在,则创建文件夹
            if (!dirFile.exists()) {
                dirFile.mkdirs();
            }
    
            fileName = dateTime + SPLIT + fileName;
            // 上传路径:可配置的根目录/业务类型/年月/时间_文件名
            String url = dir + fileName;
    
            // 写入文件
            FileUtil.write(url, inputStream);
    
            // 不返回根目录
            return (childDir + fileName);
        }
    
        @Override
        public String fmsUpload(File file) {
            if (!file.exists()) {
                throw new BizException(500, "文件不能为空");
            }
    
            //上传
            String extensionName = getExtensionName(file.getName());
            String ossDefaultPath = ossClientUtil.getOssDefaultPath(extensionName, file.getName());
            String substring = ossDefaultPath.substring(0, ossDefaultPath.lastIndexOf("."));
    
            try {
                String ossFilePath = ossClientUtil.uploadToImage(new FileInputStream(file), extensionName, substring);
                return HTTPS + prefix + ossFilePath;
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }
    
        @Override
        public String pictureUpload(MultipartFile file) {
            if (file.isEmpty()) {
                throw new BizException(500, "文件不能为空");
            }
    
            //上传
            String extensionName = getExtensionName(file.getOriginalFilename());
            String ossDefaultPath = ossClientUtil.getOssDefaultPath(extensionName, file.getOriginalFilename());
            String substring = ossDefaultPath.substring(0, ossDefaultPath.lastIndexOf("."));
    
            try {
                String ossFilePath = ossClientUtil.uploadToImage(file.getInputStream(), extensionName, substring);
                return HTTPS + prefix + ossFilePath;
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
    
        }
    }
    

    六:使用

        @Resource
        private FileService fileService;
    
    	String pdfPathName = fileService.fmsUpload(file);
    	String url = fileService.pictureUpload(file);
    
    展开全文
  • OSS文件上传报403

    2021-06-23 14:49:39
    解决方法:配置下Bucket的跨域设置 点击设置 编辑跨域规则 之后就不再报403错误了。

    解决方法:配置下Bucket的跨域设置

    1. 点击设置

    在这里插入图片描述

    1. 编辑跨域规则
      在这里插入图片描述
      之后就不再报403错误了。
    展开全文
  • 关于兼容性问题,ie8以下的可以使用4.x的版本一、引入sdk和jq二、基本配置var client =new OSS.Wrapper({region:'',accessKeyId:'‘,accessKeySecret:'',bucket:''})region:阿里云服务器地址accessKeyId:您的...

    关于兼容性问题,ie8以下的可以使用4.x的版本

    一、引入sdk和jq

    二、基本配置

    var client =new OSS.Wrapper({

    region:'',

    accessKeyId:'‘,

    accessKeySecret:'',

    bucket:''

    })

    region:阿里云服务器地址

    accessKeyId:您的key

    accessKeySecret:您的密码,

    bucket:你要上传到那个文件夹下; 这个需要在阿里云服务器建立

    三、获取文件列表

    client.list({

    'max-keys':10

    }).then(function(res) {

    console.log(res)

    }).catch(function(err){

    console.log(err)

    })

    这个时候一般会出现跨越问题,解决办法是:

    1.选择你自己新建的Bucket文件

    2.找到tab栏中的基础设置

    3.设置跨越

    当上传的文件超过100k时会报错,解决方法是在下图中暴露Headers选项中加入:

    etag

    x-oss-request-id

    x-oss-meta-test

    这三个值即可。

    四、完整代码

    js oss文件上传测试

    var client =new OSS.Wrapper({

    region:'',

    accessKeyId:'',

    accessKeySecret:'',

    bucket:''

    })

    //获取oss文件列表

    client.list({

    'max-keys':10

    }).then(function(res) {

    console.log(res)

    }).catch(function(err){

    console.log(err)

    })

    $("#file").change(function () {

    client.multipartUpload(this.files[0].name, this.files[0]).then(function (result) {

    console.log(result);

    }).catch(function (err) {

    console.log(err);

    });

    });

    参考地址:

    https://www.cnblogs.com/ossteam/p/4942227.html

    https://blog.csdn.net/dc2222333/article/details/79409513

    https://www.cnblogs.com/MainActivity/p/8492211.html

    SpringBoot整合阿里云OSS文件上传、下载、查看、删除

    1. 开发前准备 1.1 前置知识 java基础以及SpringBoot简单基础知识即可. 1.2 环境参数 开发工具:IDEA 基础环境:Maven+JDK8 所用技术:SpringBoot.lom ...

    JavaScript进阶&lpar;九&rpar;JS实现本地文件上传至阿里云服务器

    JS实现本地文件上传至阿里云服务器 前言 在前面的博客(点击查看详情)中,实现了JS将本地图片文件预览并上传至阿里云服务 ...

    构建基于阿里云OSS文件上传服务

    转载请注明来源:http://blog.csdn.net/loongshawn/article/details/50710132

    OSS文件上传及OSS与ODPS之间数据连通

    场景描述        有这样一种场景,用户在自建服务器上存有一定数量级的CSV格式业务数据,某一天用户了解到阿里云的OSS服务存储性价比高(嘿嘿,颜值高),于是想将CSV数据迁移到云上OSS中,并且 ...

    js插件---IUpload文件上传插件(包括图片)

    js插件---IUpload文件上传插件(包括图片) 一.总结 一句话总结:上传插件找到真正上传位置的代码,这样就可以知道整个上传插件的逻辑了, 找资料还是github+官方 1.如何在js中找到真正 ...

    PHP实现阿里云OSS文件上传&lpar;支持批量&rpar;

    上传文件至阿里云OSS,整体逻辑是,文件先临时上传到本地,然后在上传到OSS,最后删除本地的临时文件(也可以不删,具体看自己的业务需求),具体实现流程如下:   1.下载阿里云OSS对象上传SDK(P ...

    PHP 多图上传,图片批量上传插件,webuploader&period;js,百度文件上传插件

    PHP  多图上传,图片批量上传插件,webuploader.js,百度文件上传插件(案例教程) WebUploader作用:http://fex.baidu.com/webuploader/gett ...

    php阿里云oss文件上传

    php的文件上传 文件上传 php的文件上传放在了$_FILES数组里,单文件和多文件上传的区别在于$_FILES['userfile']['name']是否为数组, 不熟悉的可以读一下官方文档 单文 ...

    基于uploadify&period;js实现多文件上传和上传进度条的显示

    uploadify是JQuery的一个插件,主要实现文件的异步上传功能,可以自定义文件大小限制.文件类型.是否自动上传等属性,可以显示上传的进度条.官网地址是http://www.uploadify. ...

    随机推荐

    Frame动画实战

    Android动画分为Tween动画和Frame动画,Tween动画主要包括图片的放大缩小.旋转.透明度变化.移动等等操作:Frame动画则简单得多了,就是把一张张的图片连续播放产生动画效果. 本节主 ...

    springboot教程

    http://www.cnblogs.com/java-zhao/tag/spring-boot/ http://blog.csdn.net/liaokailin/article/category/5 ...

    如何优化cocos2d程序的内存使用和程序大小:第一部分

    译者: 在我完成第一个游戏项目的时候,我深切地意识到“使用cocos2d来制作游戏的开发者们,他们大多会被cocos2d的内存问题所困扰”.而我刚开始接触cocos2d的时候,社区里面的人们讨论了一个 ...

    深入&period;NET框架

    .NET是微软公司在2000年推出的一个战略(平台). 其目的就是想 任何人使用任何终端设备在任何地方都可以访问微软提供的服务. .NET Framework两大组件: CLR(Common Lang ...

    微信 关闭手机微信内置浏览器的js

    WeixinJSBridge.call('closeWindow');

    IOS开发-PCH文件的使用

    PCH文件存储一些共享的数据,在其他的文件可以直接使用,这样减少程序输入,比如存储宏定义 1.首先新建PCH文件 2.建立完毕 3.在这里找到文件路径 4.进入targets 点击Build Sttt ...

    hihocoder 1237 Farthest Point

    #1237 : Farthest Point 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 Given a circle on a two-dimentional pla ...

    创建型模式——Builder

    1.意图 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 2.结构 3.参与者 Builder为创建一个Product对象的各个部件指定抽象接口 ConcreteBuild ...

    Javascript面向对象编程(一):封装

    Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象.但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有class(类). 那么,如果 ...

    JDK命令行工具

    jinfo(Configuration Info for Java)的作用是实时地查看和调整虚拟机各项参数 jmap(Memory Map for Java)命令用于生成堆转储快照(一般称为heapd ...

    展开全文
  • 1.oss依赖: <!-- oss --> <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>2.8.3</version> </...
  • 1.该文章说明了如何使用oss保存备份文件并定期删除 2.使用oss是因为价格低廉,并且服务器的存储空间有限,备份文件按日期不断叠加,容易撑爆服务器存储空间,所以直接上传到oss上保存 3.在上传到oss的基础上,通过...
  • 阿里云 OSS 文件管理

    2021-06-30 18:26:28
    OSS 文件上传 AliyunOSSHelper 类 public class AliyunOSSHelper { // private static string endpoint = ConfigurationManager.AppSettings[“AliyunOSS_endpoint”] ?? “”; // private static string ...
  • 删除的时候记住不要带域名,也不要带'/'这个路径符号,如全路径是:'https://hxty.oss-cn-beijing.aliyuncs.com/data/pdf/contract/2021-06-16/HXSHB21061611594482340c.pdf',则这里的path_file路径为:'data/pdf/...
  • OSS简单实现文件上传

    千次阅读 2021-01-15 14:45:31
    OSS简单实现文件上传一、添加依赖二、修改配置文件三、代码实现 OSS 阿里云对象存储OSS(Object Storage Service)为您提供基于网络的数据存取服务。使用OSS,您可以通过网络随时存储和调用包括文本、图片、音视频...
  • SpringBoot实现oss文件的上传与下载 最近项目中需要通过OSS来实现文件的上传和下载以及根据oss文件(word模板)生成Word,特此记录,以便日后查阅。 一、相关概述 OSS对象存储   阿里云对象存储服务(Object ...
  • 一:pom添加以来jarcom.aliyun.ossaliyun-sdk-oss2.8.3当然,也能下载jar导入项目;二:关于文件上传的参数配置新建 properties文件三:在业务逻辑层获取阿里云对象1:先获取属性文件final static String endpoint =...
  • 阿里云OSS文件存储

    2021-09-22 11:20:26
    1、引入阿里云OSS的pom依赖 <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>2.8.3</version> </...
  • String upload(InputStream ...下载文件 @param response @param filePath @param name @author zhangzhixiang @date 2018/10/17 10:59:43 @return void */ void download(HttpServletResponse re
  • Android OSS下载文件

    2021-04-08 15:32:53
    近期,公司要求使用OSS下载文件,优化下载模块 首先,想要使用OSS,必须下载其相关依赖 implementation 'com.aliyun.dpa:oss-android-sdk:2.9.5' // implementation project(':oss-android-sdk') 依赖下载成功后...
  • 编译特定版本Hadoop访问OSS的Jar包 目前Hadoop trunk 分支已经包含了hadoop-aliyun模块的代码,hadoop已经默认支持aliyun oss的访问支持。但是我们公司的hadoop版本还是CDH5的分支版本,默认是没有oss支持的。 通过...
  • 记录工作中的一点失误,ossUtil类中的属性filedir(文件存储目录)需要“/”才能生成目录 项目中的本地文件夹和oss上的文件夹是一样的,是由传入controller的参数决定的 一、项目目录 二、加入jar 三、代码 ...
  • pom 文件添加依赖 com.aliyun.oss aliyun-sdk-oss 2.8.3 /** * @author sun * @date 2019/5/8 000817:41 */ public class AliyunOSSConfigConstant { //私有构造方法 禁止该类初始化 private ...
  • 引入依赖 <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId>...上传文件 ... * 上传文件 ... * @param key oss存放文件的地址
  • OSS 上传出现异常案例一:OSSBrower "no space left on"分析:有明显报错信息的先 Google 一下,看看是操作系统错误还是 OSSBrower 抛出,经过鉴定错误是 Linux 系统底层返回,说明当时系统的 OSSBrower 所在的目录...
  • } /** * 获取oss文件 * * @param key * @return */ @RequestMapping("/onlineSee") public Map onlineSee(String key) { OSSUtil ossClient = new OSSUtil(); Map m = new HashMap(); String strings = ossClient....
  • 上传文件oss: 1 使用ossutil64工具,需要安装运行: wget http://gosspublic.alicdn.com/ossutil/1.7.3/ossutil64 登录验证信息: secret_id: secret_key: url:oss://qz-test/ailearn-mudel-test/ a.先登录 ...
  • java 阿里云上传文件OSS,并返回文件路径
  • 3.2、pom文件引入依赖3.3、在application.yml配置相关的数据3.4、创建OSSController生成密钥3.5、配置跨域3.6、目录结构3.7、测试生成密钥的接口四、前端使用4.1、说明4.2、页面效果4.3、完整页面代码4.4、上传效果...
  • OSS上传文件

    2021-06-28 17:38:44
    @Api(tags = {"OSS对象存储文件 管理"}) @RestController @RequestMapping("/oss") public class OssFileController { @Resource private OssFileService fileUploadService; @ApiOperation(value = "文件上传",...
  • Bucket 就是存储空间,我们的文件放在那里。具体操作如下: 1、点击进入阿里云OSS,在 Bucket 列表创建自己的存储空间。 2、填写空间名,选择地域节点等操作。 我们的存储空间创建好了,下一步就是集成到我们的...
  • 阿里云OSS提供了有两种上传文件的方式。//通过multipart上传文件function upload_by_multi_part($obj){$bucket = 'phpsdk1349849394';$object = 'Mining.the.Social.Web-'.time().'.pdf'; //英文$filepath = "D:\\...
  • } /** * 删除文件 */ public boolean deleteFile(String fileName) { String key = prefix + fileName; COSClient cosclient = null; try { //初始化用户身份信息(secretId,secretKey) COSCredentials ...
  • import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.model.DeleteObjectsRequest; import com.aliyun.oss.model.DeleteObjectsResult; import org.springframework.beans....
  • 1.1、上传文件 @Value("${oss.endpoint}") private String endpoint; @Value("${oss.accessKeyId}") private String accessKeyId; @Value("${oss.accessKeySecret}") private String accessKeySecret; @...
  • --配置阿里云oss相关常量参数 /** @Author: xxxx @Description: ${description} 阿里云 constant @Date: 2020/11/26 14:15 */ public class AliyunOSSConfigConstant { // 私有构造方法 禁止该类初始化 private ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,812
精华内容 8,724
关键字:

oss文件删除