java如何读取jpg文件的url缓存到内存并上传oss服务器
时间: 2024-05-03 21:22:31 浏览: 160
以下是一个示例代码,演示了如何读取一个 jpg 文件的 URL,将其缓存到内存中,并上传到 OSS 服务器:
```java
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Base64;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectRequest;
public class JpgUploader {
private static final String ACCESS_KEY_ID = "<your-access-key-id>";
private static final String ACCESS_KEY_SECRET = "<your-access-key-secret>";
private static final String ENDPOINT = "<your-oss-endpoint>";
private static final String BUCKET_NAME = "<your-bucket-name>";
public static void main(String[] args) throws IOException {
// 读取 JPG 文件的 URL
URL url = new URL("<your-jpg-file-url>");
InputStream inputStream = url.openStream();
byte[] bytes = inputStream.readAllBytes();
inputStream.close();
// 将 JPG 文件缓存到内存中
String base64 = Base64.getEncoder().encodeToString(bytes);
// 初始化 OSS 客户端
OSS ossClient = new OSSClientBuilder().build(ENDPOINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET);
// 上传到 OSS 服务器
String objectName = "<your-object-name>";
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentLength(bytes.length);
metadata.setContentType("image/jpeg");
PutObjectRequest request = new PutObjectRequest(BUCKET_NAME, objectName, base64ToInputStream(base64), metadata);
ossClient.putObject(request);
// 关闭 OSS 客户端
ossClient.shutdown();
}
private static InputStream base64ToInputStream(String base64) {
byte[] bytes = Base64.getDecoder().decode(base64);
return new ByteArrayInputStream(bytes);
}
}
```
需要注意的是,这里将 JPG 文件缓存到内存中使用了 Base64 编码,这样可以将二进制数据转换为字符串,方便上传到 OSS 服务器。但是这种方式会增加一些额外的开销,如果 JPG 文件比较大,可能会导致内存不足。因此,如果需要上传大文件,建议使用其他方式,比如分片上传。另外,这里使用了阿里云 OSS SDK,需要在项目中添加相关的依赖。
阅读全文