最近公司文件对接云服务为Ucloud,看过Ufile的官方文档,感觉有些模糊,各种帖子也是,里面使用的ufile方法都无法引用到,写了一个demo实现上传下载。
一、依赖,到官方查询对应maven依赖即可(因为公司项目没有使用maven管理,所以需要以下Jar包)
二、封装工具类
public class Constants {
static {
/**
* 开启Debug级别日志
*/
JLog.SHOW_TEST = true;
JLog.SHOW_DEBUG = true;
/**
* 配置UfileClient,必须在使用UfileClient之前调用
*/
UfileClient.configure(new UfileClient.Config(
new HttpClient.Config(10, 5, TimeUnit.MINUTES)
.setTimeout(10 * 1000, 30 * 1000, 30 * 1000)
.setExecutorService(Executors.newSingleThreadExecutor())));
}
/**
* 本地Bucket相关API的签名器(账号在ucloud 的API 公私钥,不能使用token)
* 如果只用到了文件操作,不需要配置下面的bucket 操作公私钥
*/
public static final BucketAuthorization BUCKET_AUTHORIZER = new UfileBucketLocalAuthorization(
"",
"");
/**
* 本地Object相关API的签名器
* 请修改下面的公私钥
*/
public static final ObjectAuthorization OBJECT_AUTHORIZER = new UfileObjectLocalAuthorization(
"公钥",
"私钥");
}
public class UfileUtil {
private static final Logger logger = LogManager.getLogger(UfileUtil.class);
public static String upload(String fileName, String path) throws Exception{
String fileUrl = "";
//需要被上传文件的位置
File file = new File(path);
//上传到服务器上,文件的位置
String ServerFileName = "demopath/" + fileName;
//配置信息 区域 后缀
ObjectConfig config = new ObjectConfig("cn-bj", "ufileos.com");
ObjectApiBuilder apiBuild = UfileClient.object(Constants.OBJECT_AUTHORIZER, config);
// mimeType 可参考:https://www.jianshu.com/p/4b5d5dc252c3
PutFileApi api = apiBuild.putObject(file, "text/plan");
//上传到服务器的文件名称 demo/目录 admin002.txt(文件名) 不要用/开头
api = api.nameAs(ServerFileName);
//申请的空间名称
api = api.toBucket("");
api = api.setOnProgressListener(new OnProgressListener() {@Override
public void onProgress(long bytesWritten, long contentLength)
{
logger.info("bytesWritten:{},contentLength:{}", bytesWritten, contentLength);
}
});
PutObjectResultBean response = api.execute();
logger.info("response:{}", JSONObject.toJSONString(response));
if ("0".equals(String.valueOf(response.getRetCode()))){
fileUrl = "http://申请的空间地址,如xxxx.cn-bj.ufileos.com/" + ServerFileName;
logger.info("云服务存储url:{}", fileUrl);
}
return fileUrl;
}
}
注意:如果云空间设置为私有空间,返回的地址无法直接使用,点击后会返回没有签名错误,如果设置的公有空间则可以直接使用,另外,这个地址并不是文件类型,而是文件数据流,所以文件下载需要自己进行流处理返回文件数据。
File file = new File(path);
//配置信息 区域 后缀
ObjectConfig config = new ObjectConfig("cn-bj", "ufileos.com");
ObjectApiBuilder apiBuild = UfileClient.object(Constants.OBJECT_AUTHORIZER, config);
GetFileApi fd = apiBuild.getFile(fileRecord.getStr("上面返回的文件地址"));
fd.saveAt(dirStr, "要设置的文件名");
try {
logger.info("下载云服务文件开始>>>>>>>>>>");
DownloadFileBean execute = fd.execute();
file = execute.getFile();
logger.info("下载云服务文件完成>>>>>>>>>>");
}catch (Exception e){
logger.error("捕获异常:下载云服务文件出错!", e);
}
FileWriter fw = new FileWriter(file, true);
BufferedWriter bw = new BufferedWriter(fw);
try {
bw.flush();
}catch (Exception e){
logger.error("捕获异常:文件下载出错!", e);
}finally {
bw.close();
fw.close();
}