亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

阿里OSS工具類(lèi)

馬忠志 / 2835人閱讀

摘要:參考博客阿里入門(mén)配置信息配置文件工具類(lèi)將文件上傳到阿里本地文件在阿里中保存的可以包含路徑的文件名返回上傳后文件的訪問(wèn)路徑如果需要上傳時(shí)設(shè)置存儲(chǔ)類(lèi)型與訪問(wèn)權(quán)限,請(qǐng)參考以下示例代碼。遍歷所有文件關(guān)閉。

參考博客:阿里OSS入門(mén)

bucket配置信息:alios.properties

OSS配置文件:AliOSSConfig.java

@Datapublic class AliOSSConfig {    private String endpoint;    private String accessKeyId;    private String accessKeySecret;    private String bucketName;    private  AliOSSConfig(){        Properties properties = new Properties();        try {            properties.load(AliOSSConfig.class.getResourceAsStream("/oss/alioss.properties"));        } catch (IOException e) {            e.printStackTrace();        }        endpoint = properties.getProperty("endpoint");        accessKeyId= properties.getProperty("accessKeyId");        accessKeySecret= properties.getProperty("accessKeySecret");        bucketName= properties.getProperty("bucketName");    }    private static AliOSSConfig instance = new AliOSSConfig();    public static AliOSSConfig getInstance() {        return instance;    }}

工具類(lèi):AliOSSUtil.java

public class AliOSSUtil {    private static final String endpoint = AliOSSConfig.getInstance().getEndpoint();    private static final String accessKeyId = AliOSSConfig.getInstance().getAccessKeyId();    private static final String accessKeySecret = AliOSSConfig.getInstance().getAccessKeySecret();    private static final String bucketName = AliOSSConfig.getInstance().getBucketName();    /**     * 將文件上傳到阿里OSS     *     * @param sourceFilePathName 本地文件     * @param aimFilePathName    在阿里OSS中保存的可以包含路徑的文件名     * @return 返回上傳后文件的訪問(wèn)路徑     * @throws FileNotFoundException     */    public static String upload(String sourceFilePathName, String aimFilePathName) throws FileNotFoundException {        FileInputStream is = new FileInputStream(sourceFilePathName);        if (aimFilePathName.startsWith("/")) {            aimFilePathName = aimFilePathName.substring(1);        }        // 如果需要上傳時(shí)設(shè)置存儲(chǔ)類(lèi)型與訪問(wèn)權(quán)限,請(qǐng)參考以下示例代碼。        ObjectMetadata metadata = new ObjectMetadata();        int indexOfLastDot = aimFilePathName.lastIndexOf(".");        String suffix = aimFilePathName.substring(indexOfLastDot);        metadata.setContentType(getContentType(suffix));        //避免文件覆蓋        aimFilePathName = aimFilePathName.substring(0, indexOfLastDot) + System.currentTimeMillis() + suffix;        PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, aimFilePathName, is);        //避免訪問(wèn)時(shí)將圖片下載下來(lái)        putObjectRequest.setMetadata(metadata);        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);        ossClient.putObject(putObjectRequest);        Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 100);        URL url = ossClient.generatePresignedUrl(bucketName, aimFilePathName, expiration);        // 關(guān)閉ossClient        ossClient.shutdown();        return url.toString();    }    /**     * 網(wǎng)絡(luò)實(shí)現(xiàn)上傳頭像到OSS     *     * @param multipartFile     * @return     */    public static String upload(MultipartFile multipartFile) throws IOException {        // 獲取上傳的文件的輸入流        InputStream inputStream = multipartFile.getInputStream();        // 獲取文件名稱(chēng)        String fileName = multipartFile.getOriginalFilename();        // 避免文件覆蓋        int i = fileName.lastIndexOf(".");        String suffix = fileName.substring(i);        fileName = fileName.substring(0, i) + System.currentTimeMillis() + suffix;        // 把文件按照日期進(jìn)行分類(lèi)        // 獲取當(dāng)前日期        String datePath = DateTimeFormatter.ISO_DATE.format(LocalDate.now());        // 拼接fileName        fileName = datePath + "/" + fileName;        // 如果需要上傳時(shí)設(shè)置存儲(chǔ)類(lèi)型與訪問(wèn)權(quán)限        ObjectMetadata metadata = new ObjectMetadata();        metadata.setContentType(getContentType(fileName.substring(fileName.lastIndexOf("."))));        // 上傳文件到OSS時(shí)需要指定包含文件后綴在內(nèi)的完整路徑,例如abc/efg/123.jpg。        PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, fileName, inputStream);        putObjectRequest.setMetadata(metadata);        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);        ossClient.putObject(putObjectRequest);        //文件訪問(wèn)路徑        Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 100);        URL url = ossClient.generatePresignedUrl(bucketName, fileName, expiration);        // 關(guān)閉ossClient        ossClient.shutdown();        // 把上傳到oss的路徑返回        return url.toString();    }    /**     * 返回contentType     *     * @param FileNameExtension     * @return     */    private static String getContentType(String FileNameExtension) {        if (FileNameExtension.equalsIgnoreCase(".bmp")) {            return "image/bmp";        }        if (FileNameExtension.equalsIgnoreCase(".gif")) {            return "image/gif";        }        if (FileNameExtension.equalsIgnoreCase(".jpeg") ||                FileNameExtension.equalsIgnoreCase(".jpg") ||                FileNameExtension.equalsIgnoreCase(".png")        ) {            return "image/jpg";        }        return "image/jpg";    }    /**     * 列舉 指定路徑下所有的文件的文件名     * 如果要列出根路徑下的所有文件,path= ""     *     * @param path     * @return     */    public static List<String> listFileName(String path) {        List<String> res = new ArrayList<>();        // 構(gòu)造ListObjectsRequest請(qǐng)求。        ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName);        // 設(shè)置prefix參數(shù)來(lái)獲取fun目錄下的所有文件。        listObjectsRequest.setPrefix(path);        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);        // 列出文件。        ObjectListing listing = ossClient.listObjects(listObjectsRequest);        // 遍歷所有文件        for (OSSObjectSummary objectSummary : listing.getObjectSummaries()) {            System.out.println(objectSummary.getKey());        }        // 關(guān)閉OSSClient。        ossClient.shutdown();        return res;    }    /**     * 列舉文件下所有的文件url信息     */    public static List<String> listFileUrl(String path) {        List<String> res = new ArrayList<>();        // 構(gòu)造ListObjectsRequest請(qǐng)求        ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName);        // 設(shè)置prefix參數(shù)來(lái)獲取fun目錄下的所有文件。        listObjectsRequest.setPrefix(path);        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);        // 列出文件。        ObjectListing listing = ossClient.listObjects(listObjectsRequest);        // 遍歷所有文件。        for (OSSObjectSummary objectSummary : listing.getObjectSummaries()) {            //文件訪問(wèn)路徑            Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 100);            URL url = ossClient.generatePresignedUrl(bucketName, objectSummary.getKey(), expiration);            res.add(url.toString());        }        // 關(guān)閉OSSClient。        ossClient.shutdown();        return res;    }    /**     * 判斷文件是否存在     *     * @param objectName     * @return     */    public static boolean isFileExist(String objectName) {        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);        boolean res = ossClient.doesObjectExist(bucketName, objectName);        return res;    }    /**     * 通過(guò)文件名下載文件     *     * @param objectName    要下載的文件名     * @param localFileName 本地要?jiǎng)?chuàng)建的文件名     */    public static void downloadFile(String objectName, String localFileName) {        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);        // 下載OSS文件到本地文件。如果指定的本地文件存在會(huì)覆蓋,不存在則新建。        ossClient.getObject(new GetObjectRequest(bucketName, objectName), new File(localFileName));        // 關(guān)閉OSSClient。        ossClient.shutdown();    }    /**     * 刪除文件或目錄     *     * @param objectName     */    public static void delelteFile(String objectName) {        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);        ossClient.deleteObject(bucketName, objectName);        ossClient.shutdown();    }    /**     * 批量刪除文件或目錄     *     * @param keys     */    public static void deleteFiles(List<String> keys) {        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);        // 刪除文件。        DeleteObjectsResult deleteObjectsResult = ossClient.deleteObjects(new DeleteObjectsRequest(bucketName).withKeys(keys));        java.util.List<String> deletedObjects = deleteObjectsResult.getDeletedObjects();        ossClient.shutdown();    }    /**     * 創(chuàng)建文件夾     *     * @param folder     * @return     */    public static String createFolder(String folder) {        // 文件夾名        final String keySuffixWithSlash = folder;        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);        // 判斷文件夾是否存在,不存在則創(chuàng)建        if (!ossClient.doesObjectExist(bucketName, keySuffixWithSlash)) {            // 創(chuàng)建文件夾            ossClient.putObject(bucketName, keySuffixWithSlash, new ByteArrayInputStream(new byte[0]));            // 得到文件夾名            OSSObject object = ossClient.getObject(bucketName, keySuffixWithSlash);            String fileDir = object.getKey();            ossClient.shutdown();            return fileDir;        }        return keySuffixWithSlash;    }}

注意:為了避免OSS鏈接出現(xiàn) connection pool shutdown錯(cuò)誤,不要在類(lèi)中創(chuàng)建了OSSClient對(duì)象 ,因?yàn)檫@樣做的話所有方法共用此實(shí)例對(duì)象,在前端很短的時(shí)間內(nèi)連續(xù)提交,造成異常錯(cuò)誤。應(yīng)該將OSSClient對(duì)象在方法中創(chuàng)建。

測(cè)試代碼

class AliOSSUtilTest {    @Test    void upload() throws FileNotFoundException {        //上傳文件        String url = AliOSSUtil.upload("E://圖片//510.jpg", "/aa/bb/ba.jpg");        System.out.println(url);    }    @Test    void listFileName() {        List<String> res = AliOSSUtil.listFileName("aa/");        res.forEach(System.out::println);    }    @Test    void listFileUrl() {        List<String> res = AliOSSUtil.listFileUrl("aa/");        res.forEach(System.out::println);    }    @Test    void isFileExist() {        boolean res = AliOSSUtil.isFileExist("aa/bb/ab1637160001528.jpg");        System.out.println(res);    }    @Test    void downloadFile() {        AliOSSUtil.downloadFile("aa/bb/ab1637160001528.jpg", "d:/aaawer.jpg");    }    @Test    void delelteFile() {        AliOSSUtil.delelteFile("aa/bb/ab1637160001528.jpg");    }    @Test    void deleteFiles() {        List<String> keys = List.of("aa/bb/ab1637160001528.jpg", "aa/bb/ba1637160268079.jpg","aa/bb/cc");        AliOSSUtil.deleteFiles(keys);    }    @Test    void createFolder() {        String folder = AliOSSUtil.createFolder("aa/bb/cc");        System.out.println(folder);    }}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/123892.html

相關(guān)文章

  • SpringBoot 整合 阿里OSS 存儲(chǔ)服務(wù),快來(lái)免費(fèi)搭建一個(gè)自己的圖床

    摘要:筆主很早就開(kāi)始用阿里云存儲(chǔ)服務(wù)當(dāng)做自己的圖床了。阿里云對(duì)象存儲(chǔ)文檔,本篇文章會(huì)介紹到整合阿里云存儲(chǔ)服務(wù)實(shí)現(xiàn)文件上傳下載以及簡(jiǎn)單的查看。 Github 地址:https://github.com/Snailclimb/springboot-integration-examples(SpringBoot和其他常用技術(shù)的整合,可能是你遇到的講解最詳細(xì)的學(xué)習(xí)案例,力爭(zhēng)新手也能看懂并且能夠在看完...

    鄒強(qiáng) 評(píng)論0 收藏0
  • 騰訊云和阿里云對(duì)比哪個(gè)好?云計(jì)算優(yōu)勢(shì)測(cè)評(píng)

    摘要:騰訊云和阿里云針對(duì)按量計(jì)費(fèi)的云服務(wù)器,均要求賬戶(hù)內(nèi)有一定的余額騰訊云好像沒(méi)有最低充值要求,充值元即可阿里云要求賬戶(hù)內(nèi)至少有元余額?;谏鲜鲈颍覀兎謩e在騰訊云和阿里云創(chuàng)建最低配版的云數(shù)據(jù)庫(kù)和。 云計(jì)算市場(chǎng)爭(zhēng)奪阿里云作為名副其實(shí)的國(guó)內(nèi)業(yè)界第一,名聲非常大,不過(guò)最近 IT 之家的事鬧出來(lái)之后,我有點(diǎn)慶幸最終沒(méi)有選擇它。騰訊云算是業(yè)界老二,而且有著騰訊這個(gè)強(qiáng)大的靠山,云服務(wù)產(chǎn)品的種類(lèi)和質(zhì)量...

    zengdongbao 評(píng)論0 收藏0
  • 基于阿里云Serverless架構(gòu)下函數(shù)計(jì)算的最新應(yīng)用場(chǎng)景詳解(一)

    摘要:如果使用阿里云函數(shù)計(jì)算,您將高峰期每小時(shí)的訪問(wèn)日志,或者低谷期每小時(shí)的訪問(wèn)日志交給一個(gè)計(jì)算函數(shù)處理,并將處理結(jié)果存到中。下面結(jié)合阿里云的函數(shù)計(jì)算產(chǎn)品來(lái)講解各個(gè)應(yīng)用場(chǎng)景中架構(gòu)以及如何解決的場(chǎng)景中的痛點(diǎn)。 摘要: Serverless概念是近年來(lái)特別火的一個(gè)技術(shù)概念,基于這種架構(gòu)能構(gòu)建出很多應(yīng)用場(chǎng)景,適合各行各業(yè),只要對(duì)輕計(jì)算、高彈性、無(wú)狀態(tài)等場(chǎng)景有訴求的用戶(hù)都可以通過(guò)本文來(lái)普及一些基礎(chǔ)概...

    Eidesen 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<