美文网首页
Java集成Ucloud中Ufile实现文件上传和下载

Java集成Ucloud中Ufile实现文件上传和下载

作者: Rain_z | 来源:发表于2021-03-19 16:56 被阅读0次

最近公司文件对接云服务为Ucloud,看过Ufile的官方文档,感觉有些模糊,各种帖子也是,里面使用的ufile方法都无法引用到,写了一个demo实现上传下载。

一、依赖,到官方查询对应maven依赖即可(因为公司项目没有使用maven管理,所以需要以下Jar包)

依赖.png

二、封装工具类

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();
        }

相关文章

网友评论

      本文标题:Java集成Ucloud中Ufile实现文件上传和下载

      本文链接:https://www.haomeiwen.com/subject/sazvcltx.html