Java OSS图片和文件上传

package com.example.web_wechat.controller;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.internal.OSSHeaders;
import com.aliyun.oss.model.CannedAccessControlList;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.StorageClass;
import javafx.util.Pair;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.InputStream;
import java.util.UUID;

/**
 * @author dugt1998@163.com
 * @date 2020/11/21 9:13
 */
@Component
public class OSSUtil {
    @Value("${aliyun.oss.endpoint}")
    private String endpoint;
    @Value("${aliyun.user.accessKeyId}")
    private String keyid;
    @Value("${aliyun.user.accessKeySecret}")
    private String keySecret;
    @Value("${aliyun.oss.bucketName}")
    private String bucketName;



    /**
     * 上传图片 (连接点击可以预览)
     * dugt1998@163.com
     */
    public Pair<String, String> uploadImg(MultipartFile file,String dir) throws Exception {
        InputStream in = file.getInputStream();
        String fileName = file.getOriginalFilename();
        ObjectMetadata metadata = new ObjectMetadata();
        metadata.setContentLength(in.available());
        metadata.setCacheControl("no-cache");
        metadata.setHeader("Access-Control-Allow-Origin", "*");
        metadata.setHeader("Access-Control-Allow-Methods", "POST GET HEAD PUT DELETE");
        metadata.setHeader("Access-Control-Max-Age", "3600");
        metadata.setHeader("Pragma", "no-cache");
        metadata.setContentEncoding("utf-8");
        metadata.setContentType(getContentType(fileName));
        OSS oss = new OSSClientBuilder().build(endpoint, keyid, keySecret);
        String uuid = UUID.randomUUID().toString();
        oss.putObject(bucketName, dir +"/"+ uuid + fileName, in, metadata);
        oss.shutdown();
        in.close();
        String url = 
        "https://" + bucketName + "." + endpoint + "/" + dir+"/" + uuid + fileName;

        return new Pair<>(url, uuid + fileName);
    }

    public 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";
        }
        if (FilenameExtension.equalsIgnoreCase(".html")) {
            return "text/html";
        }
        if (FilenameExtension.equalsIgnoreCase(".txt")) {
            return "text/plain";
        }
        if (FilenameExtension.equalsIgnoreCase(".vsd")) {
            return "application/vnd.visio";
        }
        if (FilenameExtension.equalsIgnoreCase(".pptx") ||
                FilenameExtension.equalsIgnoreCase(".ppt")) {
            return "application/vnd.ms-powerpoint";
        }
        if (FilenameExtension.equalsIgnoreCase(".docx") ||
                FilenameExtension.equalsIgnoreCase(".doc")) {
            return "application/msword";
        }
        if (FilenameExtension.equalsIgnoreCase(".xml")) {
            return "text/xml";
        }
        return "image/jpg";
    }


    /**
     **上传文件,点击返回的地址是下载    
    */
    public Pair<String, String> ossFileUpload(File file,String dir) {
        String ossFileName = UUID.randomUUID() + "_" + file.getName();
        OSS ossClient = new OSSClientBuilder().build(endpoint, keyid, keySecret);
        try {
            PutObjectRequest putObjectRequest = 
            new PutObjectRequest(bucketName, ossFileName, file);
            
            ObjectMetadata metadata = new ObjectMetadata();
            metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS,
            StorageClass.Standard.toString());
            
            metadata.setObjectAcl(CannedAccessControlList.PublicReadWrite);
            metadata.setContentType("application/octet-stream");
            putObjectRequest.setMetadata(metadata);
            ossClient.putObject(putObjectRequest);
            String url = "https://" + bucketName + "." + endpoint + "/" + ossFileName;
            return new Pair<>(url, ossFileName);
        } catch (Exception e) {
            throw new RuntimeException();
        } finally {
            ossClient.shutdown();
            file.delete();
        }
    }
}

依赖包:

        

        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>3.10.2</version>
        </dependency>

application.yml

        

aliyun:
    user:
        accessKeyId: xxxxxxxxxxxx
        accessKeySecret: xxxxxxxxxxxx
    oss:
        endpoint: oss-cn-hangzhou.aliyuncs.com
        bucketName: xxxxxxxxxxxx

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java中使用阿里云OSS(Object Storage Service)上传图片,你可以遵循以下步骤: 1. **设置依赖**: 首先,你需要在项目中添加阿里云OSS SDK的依赖。如果你使用Maven,可以在pom.xml文件中添加相应的groupId(com.aliyun.oss)和artifactId(aliyun-sdk-oss)。 ```xml <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>最新版本号</version> </dependency> ``` 请确保替换为最新的SDK版本。 2. **初始化客户端**: 使用SDK创建OSSClient实例,通常需要提供AccessKey和SecretKey以及Bucket名称。 ```java import com.aliyuncs.OSS; import com.aliyuncs.auth.AcsAuth; import com.aliyuncs.exceptions.OSSException; // ... String endpoint = "http://your-endpoint.oss-cn-hangzhou.aliyuncs.com"; String accessKeyId = "your-access-key-id"; String accessKeySecret = "your-access-key-secret"; String bucketName = "your-bucket-name"; AcsAuth auth = new AcsAuth(accessKeyId, accessKeySecret); OSS ossClient = new OSS(auth, endpoint); ``` 3. **上传图片**: 使用`putObject`方法将本地图片上传到OSS,记得指定目标路径。 ```java import java.io.File; // ... File fileToUpload = new File("path/to/your/local/image.jpg"); String objectKey = "image.jpg"; // 在OSS中的存储路径 try { ossClient.putObject(bucketName, objectKey, fileToUpload); } catch (OSSException e) { // 处理异常 System.err.println(e.getMessage()); } ``` 4. **处理异常**: SDK会抛出OSSException,你需要捕获并处理这些异常,例如打印错误信息或记录日志。 5. **上传完成**: 上传完成后,你可以检查文件是否成功上传到OSS,可以通过查询ObjectInfo来确认。 ```java ObjectMetadata metadata = ossClient.getObjectMetadata(bucketName, objectKey); System.out.println(metadata.getETag()); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值