java使用Ucloud对象存储

最近研究了Ucloud的对象存储,使用起来很简单,总结一下。

1、配置UFile

官网上下载下来的SDK,jar包和测试类都包含在其中,结合到项目中,有重复的jar包,要选一留下,不要都留。

配置文档的配置:

UCloudPublicKey=HLLK79ho09023MOXPS90hioisfqm230nalHSOP2==
UCloudPrivateKey=2c07ab4ec43ecga346347oisfqm2DLSA0js2DLSkfJSo
ProxySuffix=.cn-bj.ufileos.com
DownloadProxySuffix=.ufile.ucloud.com.cn

以上四个是申请开通后可生成的
bucketName=testUfile //是申请开通后自己命名的存储空间 --的名字


2、UFilePut(put方法上传文件)

基本参数的赋值

String bucketName = "testUfile ";  //存储空间的名字(手动写,或直接从配置文件中读取),以便于test1文件找到将要存储的空间名
String key = "test1.swf";//存储时,想把文件命名成什么
String filePath = "C:/Users/Administrator/Desktop/A.swf";  //文件上传前,存储在哪里。

实际的web开发时,无法通过前台页面获取到客户端文件存储的路径。

我采取的办法是,先上传到云端存储到指定位置,然后获取到云端的保存路径,通过云端再讲文件上传到UFile的存储空间。

上传时要注意的是,如果“test1.swf”,在testUfile中存在,将会替换原test1.swf内容,不会存储两个test1.swf文件。

以上均注意后,直接把Ufile封装好的SDK 中的Put上传拿来用即可。


3、UFileGet(下载文件)

基本参数的赋值

String bucketName = "testUfile ";
String key = "aw.swf";
String saveAsPath = "F:\\MyDownloads\\Download\\"+key;//若想指定下载后保存路径,需指定此保存地址;;若不想指定路径,不需要写
保存地址后要加文件名,否则路径会保存,会显示拒绝访问


指定下载后保存路径的话,没必要改什么,直接使用SDK中的UFileGet就可以了。

下面说一下不指定保存地址的,让用户直接下载到“浏览器默认下载路径”
InputStream inputStream = null;
OutputStream outputStream = null;
try {
inputStream = response.getContent();
OutputStream os = res.getOutputStream();
int bufSize = 1024 * 4;
byte[] buffer = new byte[bufSize];
 int bytesRead;
 res.setCharacterEncoding("UTF-8"); 
 res.setContentType("application/octet-stream;charset=utf-8");// 设置response内容的类型
               res.setHeader("Content-disposition","attachment;filename=\"" + URLEncoder.encode(theName, "UTF-8")+"\"");
               ServletOutputStream aaa = res.getOutputStream();
               outputStream = new BufferedOutputStream(res.getOutputStream());
       while ((bytesRead = inputStream.read(buffer)) > 0) {
       outputStream.write(buffer, 0, bytesRead);
       }
       outputStream.flush();

将上传的保存方法改成以上代码,主要改了加粗部分,UFileGet中其他不变。

4.预览文件

对象存储的预览,是可以调用方法,直接返回url路径,通过此路径可以预览文件。(只能预览浏览器可以直接打开的文件,例如:视频或图片)

public class UFileDownloadUrlUtil {
public String getUrl(String theName){//通过调用getUrl方法,传入存储名字作为参数,即可得到url
UseConfig use = new UseConfig();
UFileConfig.getInstance().setUcloudPublicKey(use.getUCloudPublicKey());
UFileConfig.getInstance().setUcloudPrivateKey(use.getUCloudPrivateKey());
UFileConfig.getInstance().setProxySuffix(use.getProxySuffix());
UFileConfig.getInstance().setDownloadProxySuffix(use.getDownloadProxySuffix());

UFileRequest request = new UFileRequest();
request.setBucketName(use.getBucketName());
request.setKey(theName);

System.out.println("DownloadUrl Test BEGIN ...");
// url链接的有效期为一天,从当前unix时间戳开始,86400秒后结束
boolean isPrivate = true;
UFileClient ufileClient = new UFileClient();
int ttl = 21600;
/*
* 针对私有的Bucket,为了防止盗链,建议生成的链接的有效期为ttl > 0; 如果 ttl == 0, 那么生成的链接永久有效
*/
String url = downloadUrl(ufileClient, request, ttl, isPrivate);
System.out.println(url);


// downloadFileFromUrl(url, saveAsPath);


System.out.println("DownloadUrl Test END ...\n\n");

return url;
}
private static void downloadFileFromUrl(String urlStr, String saveAsPath) {
URL url;
InputStream inputStream = null;
OutputStream outputStream = null;
try {
url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
inputStream = conn.getInputStream();
outputStream = new BufferedOutputStream(new FileOutputStream(
saveAsPath));
int bufSize = 1024 * 4;
byte[] buffer = new byte[bufSize];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, bytesRead);
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}


if (outputStream != null) {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}


private static String downloadUrl(UFileClient ufileClient,
UFileRequest request, int ttl, boolean isPrivate) {
DownloadUrl downloadUrl = new DownloadUrl();
return downloadUrl.getUrl(ufileClient, request, ttl, isPrivate);
}
}

你可能感兴趣的:(java使用Ucloud对象存储)