upyun java_UpYun体验之Java SDK

申明:本文只希望做技术探讨,无其它意思。

目前我的工作主要使用的还是Java。所以,我决定使用UpYun官方提供的Java版的SDK体验下UpYun。

原SDK存在问题

当使用IDE打开源码来看时,我发现这个SDK,有很多问题:

没有构建,所以很难自动化测试

所有的方法,功能都写在一个com.UpYun类里,虽然这些类只有1000多行,但当你看到文件加密,判断文本是否为空,上传文件等不同职责的东西混在一起,你的感觉如何?

测试文件和src源码包是在同一级目录里 ├── README.md

├── sample.jpeg

├── src

│   ├── com

│   │   └── UpYun.java

│   └── demo

│   ├── FileBucketDemo.java

│   └── PicBucketDemo.java

└── test.txt

使用这个SDK时,你还是必须去官方去查API,因为SDK中的一些方法接受的参数是Map。以下是原来上传图片及做缩略图的代码demo: // 设置缩略图的参数

Map params = new HashMap();

// 设置缩略图类型,必须搭配缩略图参数值(KEY_VALUE)使用,否则无效

params.put(PARAMS.KEY_X_GMKERL_TYPE.getValue(),

PARAMS.VALUE_FIX_BOTH.getValue());

// 设置缩略图参数值,必须搭配缩略图类型(KEY_TYPE)使用,否则无效

params.put(PARAMS.KEY_X_GMKERL_VALUE.getValue(), "150x150");

// 设置缩略图的质量,默认 95

params.put(PARAMS.KEY_X_GMKERL_QUALITY.getValue(), "95");

// 设置缩略图的锐化,默认锐化(true)

params.put(PARAMS.KEY_X_GMKERL_UNSHARP.getValue(), "true");

// 若在 upyun 后台配置过缩略图版本号,则可以设置缩略图的版本名称

// 注意:只有存在缩略图版本名称,才会按照配置参数制作缩略图,否则无效

params.put(PARAMS.KEY_X_GMKERL_THUMBNAIL.getValue(), "small");

// 上传文件,并自动创建父级目录(最多10级)

boolean result = upyun.writeFile(filePath, file, true, params);

单看这句: params.put(PARAMS.KEY_X_GMKERL_VALUE.getValue(), "150x150");,你不去官网去查,鬼知道"150x150"是什么意思。而且,很容易写错不是吗?

没有异常处理,当发生错误时,比如响应返回403时,原作者只返回一个boolean来表现成功与否,而没有使用者到底错在哪。

API的设计不好。如上传文件的API为writeFile,使用uploadFile似乎更好一些。而且几个方法参数中使用了boolean类型,你知道upyun.uploadFile(filePath, file4, true);中的true代表什么吗?

我刚开始试图在原来的代码的基础上重构,但是重构到后面,我发现,我无法重构下去。只能选择重写。

说说我的重构过程

刚开始时,我选择在原有的基础上重构,方法:

使用maven构建

while(100%满意) 一小步重构,一测试

看过《重构》的都就一定理解,我为什么要这么做了。小步是因为如果重构错了,可以很轻松的返回,测试是为了保证你的重构是正确的。

但是,重构到后面,我还是决定重写了。我不保证我的写法是最好的。只求共同学习,有哪里不好的,多谢指出。

以下是我实现的上传图片并做缩略图的代码示例:

PictureItem pictureItem = upYunClient.recursionMkDir()

.picThumbnail(ThumbnailType.VALUE_FIX_BOTH, 150, 150)

.picThumbnailQuality(95)

.picThumbnailSharpen()

.picThumbnailName("small").uploadPicture(filePath, file);

assert pictureItem.getHeight() == 150;

assert pictureItem.getWidth() == 150;

使用链式编程,舒服一些;把一些代码使用者不需要关心的东西封装起来。

最终项目结构:

├── pom.xml

├── README.md

├── src

│   ├── main

│   │   └── java

│   │   └── com

│   │   └── upyun

│   │   ├── Crypto.java

│   │   ├── FileItem.java

│   │   ├── _.java

│   │   ├── PictureItem.java

│   │   ├── PictureRotateAngle.java

│   │   ├── ThumbnailType.java

│   │   ├── UpYunAuthenticateException.java

│   │   ├── UpYunBaseException.java

│   │   ├── UpYunClient.java

│   │   ├── UpYunIOException.java

│   │   ├── UpYunNotFoundException.java

│   │   └── UpYunServerErrorException.java

│   └── test

│   ├── java

│   │   └── demo

│   │   ├── FileBucketDemo.java

│   │   ├── FileBucketTest.java

│   │   ├── PicBucketDemo.java

│   │   ├── PicBucketTest.java

│   │   └── UpYunClientBuilderTest.java

│   └── resources

│   ├── sample.jpeg

│   └── test.txt

事实上,在这里,我还没有考虑并发的情况,因为目前,我在这方面还不是很擅长。希望有朋友指出问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值