下面是Java实现七牛云文件图片上传下载的完整攻略:
什么是七牛云
七牛云是一个云存储服务提供商,用户可以基于七牛云提供的 API 或者 SDK 进行文件上传、下载、管理、转码等操作。在开发过程中,我们可以直接调用七牛云提供的 API 或者使用已有的 SDK 完成操作。
Java 实现七牛云文件图片上传下载
- 引入七牛云的 SDK
首先需要引入七牛云的 SDK,根据使用情况选择合适的 SDK 版本,在 pom.xml 文件中添加以下依赖:
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
<version>[7.4.1, 7.5.0]</version>
</dependency>
- 初始化配置信息
在代码中初始化配置信息,将 AK(AccessKey)、SK(SecretKey)、BUCKET(空间名)等信息设置为常量。示例如下:
String accessKey = "your accessKey";
String secretKey = "your secretKey";
Auth auth = Auth.create(accessKey, secretKey);
String bucket = "your bucket name";
- 上传文件
使用七牛云的 SDK 完成文件上传的过程,代码如下:
Configuration cfg = new Configuration(Zone.autoZone());
UploadManager uploadManager = new UploadManager(cfg);
// 生成上传凭证,然后准备文件上传
String localFilePath = "文件本地路径";
String key = "指定文件名";
Auth auth = Auth.create(accessKey, secretKey);
String upToken = auth.uploadToken(bucket);
try {
Response response = uploadManager.put(localFilePath, key, upToken);
// 解析上传成功的结果
DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
System.out.println(putRet.key);
System.out.println(putRet.hash);
} catch (QiniuException ex) {
Response r = ex.response;
System.err.println(r.toString());
try {
System.err.println(r.bodyString());
} catch (QiniuException ex2) {
// ignore
}
}
其中,localFilePath 表示要上传的文件在本地机器中的路径;key 表示上传到七牛云存储中的文件名;upToken 表示用户上传凭证。上传完成后,可以得到上传成功后的文件名和 hash 值。
- 下载文件
使用七牛云的 SDK 完成文件下载的过程,代码如下:
// 创建授权凭证
Auth auth = Auth.create(accessKey, secretKey);
// 文件名
String fileName = "下载文件名称";
// 公共空间域名
String domainOfBucket = "公共空间域名";
String finalUrl = String.format("%s/%s", domainOfBucket, fileName);
// 对文件名进行 URL 安全的 Base64 编码
String publicUrl = auth.privateDownloadUrl(finalUrl);
// 使用 OkHttp 完成文件的下载
Response response = new OkHttpClient().newCall(new Request.Builder().url(publicUrl).build()).execute();
try (InputStream inputStream = response.body().byteStream(); FileOutputStream fileOS = new FileOutputStream(fileName)) {
byte[] buffer = new byte[2048];
int length;
while ((length = inputStream.read(buffer)) != -1) {
fileOS.write(buffer, 0, length);
}
} catch (IOException e) {
e.printStackTrace();
}
其中,fileName 表示要下载的文件名称;domainOfBucket 表示公共空间域名。使用上述代码,可以完成文件的下载并保存到本地。
示例说明
下面是两个示例,一个是将本地图片上传到七牛云存储中,一个是从七牛云存储中下载图片并保存到本地。
- 图片上传示例:
public static void main(String[] args) {
// 初始化配置信息
String accessKey = "your accessKey";
String secretKey = "your secretKey";
String bucket = "your bucket name";
Auth auth = Auth.create(accessKey, secretKey);
Configuration cfg = new Configuration(Zone.autoZone());
UploadManager uploadManager = new UploadManager(cfg);
// 生成上传凭证,然后准备文件上传
String localFilePath = "本地图片路径";
String key = "上传文件名";
String upToken = auth.uploadToken(bucket);
try {
Response response = uploadManager.put(localFilePath, key, upToken);
// 解析上传成功的结果
DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
System.out.println(putRet.key);
System.out.println(putRet.hash);
} catch (QiniuException ex) {
Response r = ex.response;
System.err.println(r.toString());
try {
System.err.println(r.bodyString());
} catch (QiniuException ex2) {
// ignore
}
}
}
在本地存在一张图片,路径为 "D:\Pictures\test.png",该图片将通过上述代码上传到七牛云存储中,并输出上传成功后的文件名和 hash 值。
- 图片下载示例:
public static void main(String[] args) {
// 初始化配置信息
String accessKey = "your accessKey";
String secretKey = "your secretKey";
String domainOfBucket = "域名";
String fileName = "下载文件名";
Auth auth = Auth.create(accessKey, secretKey);
String finalUrl = String.format("%s/%s", domainOfBucket, fileName);
String publicUrl = auth.privateDownloadUrl(finalUrl);
try {
// 使用 OkHttp 完成文件的下载
Response response = new OkHttpClient().newCall(new Request.Builder().url(publicUrl).build()).execute();
try (InputStream inputStream = response.body().byteStream(); FileOutputStream fileOS = new FileOutputStream(fileName)) {
byte[] buffer = new byte[2048];
int length;
while ((length = inputStream.read(buffer)) != -1) {
fileOS.write(buffer, 0, length);
}
} catch (IOException e) {
e.printStackTrace();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
在七牛云存储中已存在一张名为 "test.png" 的图片,该图片将通过上述代码下载并保存到本地,并用该图片的名称命名。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java实现七牛云文件图片上传下载 - Python技术站