# Upyun-java-sdk **Repository Path**: zacker330/Upyun-java-sdk ## Basic Information - **Project Name**: Upyun-java-sdk - **Description**: 又拍云的Java SDK - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 10 - **Forks**: 1 - **Created**: 2015-07-23 - **Last Updated**: 2024-07-15 ## Categories & Tags **Categories**: web-dev-toolkits **Tags**: None ## README 又拍云 Java SDK --- 又拍云存储Java SDK,基于 [又拍云存储HTTP REST API接口](http://wiki.upyun.com/index.php?title=HTTP_REST_API接口) 开发,适用于Java 6及以上版本。 ## 目录 * [使用方法](#使用方法) * [云存储基础接口](#云存储基础接口) * [准备操作](#准备操作) * [上传文件](#上传文件) * [下载文件](#下载文件) * [获取文件信息](#获取文件信息) * [删除文件](#删除文件) * [创建目录](#创建目录) * [删除目录](#删除目录) * [获取目录文件列表](#获取目录文件列表) * [获取使用量情况](#获取使用量情况) * [图片处理接口](#图片处理接口) * [缩略图](#缩略图) * [图片裁剪](#图片裁剪) * [图片旋转](#图片旋转) * [错误代码表](#错误代码表) ## 使用方法 * maven 1. 加入OSC仓库 nexus local private nexus http://maven.oschina.net/content/groups/public/ true false 1. 加入依赖 com.upyun java-sdk 2.0.0 * 其他方法 [下载](http://maven.oschina.net/service/local/repositories/thirdparty/content/com/upyun/java-sdk/2.0.0/java-sdk-2.0.0.jar)jar包,加入到类路径。 ## 云存储基础接口 ### 准备操作 ##### 创建空间 大家可通过[又拍云主站](https://www.upyun.com/login.php)创建自己的个性化空间。具体教程请参见[“创建空间”](http://wiki.upyun.com/index.php?title=创建空间)。 ##### 初始化UpYun UpYunClient client = UpYunClient.create("空间名称", "授权操作员名称", "操作员密码"); 若不了解`授权操作员`,请参见[“授权操作员”](http://wiki.upyun.com/index.php?title=创建操作员并授权) ##### 是否开启debug模式:默认不开启 client.enableDebug(); ##### 手动设置超时时间:默认为30秒 client.timeout(60); ##### 选择最优的接入点 根据国内的网络情况,又拍云存储API目前提供了电信、联通网通、移动铁通三个接入点。 若没有明确进行设置,`UpYun`默认将根据网络条件自动选择接入点。 接入点可使用相信的API来切换: * 根据网络条件自动选择接入点: upyun.selectAutoAPIEntry(); * 电信接入点:client.selectTelecomAPIEntry(); * 联通网通接入点:client.selectUnicomAPIEntry(); * 移动铁通接入点:client.selectMobileAPIEntry(); _**注:**建议大家根据服务器网络状况,手动设置合理的接入点已获取最佳的访问速度。_ ### 上传文件 UpYunClient client = UpYunClient.create("空间名称", "授权操作员名称", "操作员密码"); // 例1:直接将纯文本内容上传到又拍云 client.uploadFile(fileRemotePath, "test content"); // 例2:将文件上传到又拍云 File file = new File(localFilePath); client.uploadFile(fileRemotePath, file); ##### 其他说明 * 文件上传成功后,可直接通过`http://空间名.b0.upaiyun.com/savePath`来访问文件 ##### 递归创建目录 不论上传文件还是图片,上传路径都有可能是多级的,如`/a/b/c/a.txt`。而在上传前调用`recursionMkDir`方法则会自动帮助你 递归创建这些目录。 只支持自动创建10级以内的父级目录。 client.recursionMkDir().uploadFile(fileRemotePath, file); ##### 注意事项 * 如果空间内`savePath`已经存在文件,将进行覆盖操作,并且是**不可逆**的。所以如果需要避免文件被覆盖的情况,可以先通过[获取文件信息](#获取文件信息)操作来判断是否已经存在旧文件。 * 图片类空间只允许上传图片类文件,其他文件上传时将返回“不是图片”的错误。 * 如果上传失败,则会抛出异常。 ##### 可选操作 1. 上传文件时可进行文件的`MD5`校验:若又拍云服务端收到的文件MD5值与用户设置的不一致,将返回 `406 Not Acceptable` 错误。对于需要确保上传文件的完整性要求的业务,可以设置该参数。 ``` client.contentMD5(UpYun.md5(file)); ``` 2. 图片类空间若设置过[缩略图版本号](http://wiki.upyun.com/index.php?title=如何创建自定义缩略图),即可使用原图保护功能(**文件类空间无效**): ``` upyun.setFileSecret("abc"); ``` **特别说明**: * 原图保护功能需要设置一个自定义的密钥(只有您自己知道,如上面的`abc`)。待文件保存成功后,将无法根据`http://空间名.b0.upaiyun.com/savePath`直接访问上传的文件,而是需要在 URL 后面加上`缩略图间隔标志符+密钥`进行访问。比如当[缩略图间隔标志符](http://wiki.upyun.com/index.php?title=如何使用自定义缩略图)为`!`,密钥为`abc`,上传的文件路径为`/dir/sample.jpg`,那么该图片的对外访问地址为: `http://空间名.b0.upaiyun.com/dir/sample.jpg!abc` * **原图保护密钥若与[缩略图版本号](http://wiki.upyun.com/index.php?title=如何创建自定义缩略图)名称相同,则在对外访问时将被视为是缩略图功能,而原图将无法访问,请慎重使用。** ### 下载文件 UpYunClient client = UpYunClient.create("空间名称", "授权操作员名称", "操作员密码"); // 例1:直接读取文本内容 String data = client.readFileText(fileRemotePath); // 例2:下载文件 File file = new File(localFilePath); // 下载后文件的存储路径 boolean result = client.downloadFile(fileRemotePath, file); ##### 注意事项 * 如果文件不存在,抛`UpYunNotFoundException`异常 ### 获取文件信息 UpYunClient client = UpYunClient.create("空间名称", "授权操作员名称", "操作员密码"); FileItem item = client.getFileInfo(fileRemotePath); ### 删除文件 UpYunClient client = UpYunClient.create("空间名称", "授权操作员名称", "操作员密码"); client.deleteFile(fileRemotePath); ##### 注意事项 * 如果文件不存在,抛`UpYunNotFoundException`异常 ### 创建目录 UpYunClient client = UpYunClient.create("空间名称", "授权操作员名称", "操作员密码"); // 方法1:创建一级目录 String dir1 = ; client.unRecursionMkDir().createFolder("/a/"); // 方法2:创建多级目录,自动创建父级目录(最多10级) client.recursionMkDir().createFolder("/a/b/c/d/"); ##### 其他说明 * 待创建的目录路径必须以斜杠 `/` 结尾 * 若空间相同目录下已经存在同名的文件,则将返回`不允许创建目录`的错误 ### 删除目录 client.deleteFolder("/a/b/c/d"); ##### 其他说明 * 该操作只能删除单级目录,不能一次性同时删除多级目录,比如当存在`/dir1/dir2/dir3/`目录时,不能试图只传递`/dir1/`来删除所有目录。 * 若待删除的目录`dir`下还存在任何文件或子目录,将返回`不允许删除`的错误。比如当存在`/dir1/dir2/dir3/`目录时,将无法删除`/dir1/dir2/`目录。 ### 获取目录文件列表 List items = client.listFiles(fileRemotePath); ##### 其他说明 * 可以循环获取`items`中文件的“名称”、“类型”(文件或目录)、“创建时间”和“文件大小” * 若`dir`目录不存在任何内容时,将直接返回一个空的`ArrayList` * 若`dir`目录不存在时,则将返回`不存在目录`的错误 ### 获取使用量情况 long usage = client.getBucketUsage(); ##### 其他说明 * 使用量的单位为 `byte`,比如`1M`的使用量将以`1048576`这样的数字返回 ## 图片处理接口 对于图片的自定义处理,又拍云存储支持以下两种方式: 1. [自定义版本](http://wiki.upyun.com/index.php?title=如何使用自定义缩略图)方式 2. 上传图片时传递图片处理参数 虽然两种方式都能够达到图片处理的效果,但存在以下区别: | 区别点 | 自定义版本方式 | 参数处理方式 | | ------------ | ---------- | ---------- | | 是否保留原图 | 是,各个缩略图都在这个原图的基础上制作 | 否,只保留处理后的图片,若再使用缩略图版本号的方式来访问(这种方法是可行的),则将在处理后的图片基础上制作 | | 空间使用量 | 以原图的大小计算使用量,后续各个版本的缩略图都不会计算在用户的空间使用量中 | 以处理后的图片大小计算使用量,大小视具体的处理参数而定 | | 灵活性 | 可通过修改自定义版本的参数来满足变化的需求,参数修改后若没有自动刷新缓存,则可以[手动强制刷新](https://www.upyun.com/purge.php)来确保新参数生效 | 只能调整代码中的处理参数,且原先保存的图片无法自动更新 | 我们更推荐大家使用自定义版本的方式对图片进行处理,但您可以根据自己业务的使用场景来选用合适的方式。 以下内容只是介绍“传递图片处理参数”的方法。 ### 缩略图 // 要传到upyun后的文件路径 String filePath = DIR_ROOT + "gmkerl.jpg"; // 本地待上传的图片文件 File file = new File(SAMPLE_PIC_FILE); PictureParamsBuilder builder = PictureParamsBuilder.create(); builder.picThumbnail(ThumbnailType.VALUE_FIX_BOTH, 150, 150) //图片质量 .picThumbnailQuality(95) //锐化 .picThumbnailSharpen() .picThumbnailName("small"); // 上传文件,并自动创建父级目录(最多10级) PictureItem pictureItem = upYunClient.recursionMkDir() .uploadPicture(filePath, file, builder); ##### 说明 `PictureParamsBuilder`为设置图片的参数的构建器。 `ThumbnailType`为缩略图的类型。 ##### 其他说明 * 图片处理参数的具体使用方法,请参考[标准API上传文件](http://wiki.upyun.com/index.php?title=标准API上传文件) * 缩略图功能只能处理图片文件;若上传非图片文件且传递了图片处理参数时,将返回`不是图片`的错误 ### 图片裁剪 // 要传到upyun后的文件路径 String filePath = DIR_ROOT + "crop.jpg"; // 本地待上传的图片文件 File file = new File(SAMPLE_PIC_FILE); // 图片裁剪功能具体可参考:http://wiki.upyun.com/index.php?title=图片裁剪 // 设置图片裁剪,参数格式:x,y,width,height PictureParamsBuilder builder = PictureParamsBuilder.createPicCutCutting(50, 50, 300, 300); // 上传图片 PictureItem pictureItem = upYunClient.uploadPicture(filePath, file, builder); ##### 其他说明 * 参数格式暂时只支持:`x,y,width,height`。比如`0,0,100,100`表示从左上角顶点裁剪`100px × 100px`大小的图片 * 具体可参考[图片裁剪](http://wiki.upyun.com/index.php?title=图片裁剪) ### 图片旋转 // 要传到upyun后的文件路径 String filePath = DIR_ROOT + "rotate.jpg"; // 本地待上传的图片文件 File file = new File(SAMPLE_PIC_FILE); // 图片旋转功能具体可参考:http://wiki.upyun.com/index.php?title=图片旋转 PictureParamsBuilder builder = PictureParamsBuilder.createPicRotateAngle(PictureRotateAngle._90); // 上传图片 PictureItem pictureItem = upYunClient.uploadPicture(filePath, file, builder); ##### 其他说明 * 暂时只接受"auto","90","180","270"四种参数(由PictureRotateAngle枚举提供),其中`auto`处理时需要图片包含`EXIF`信息 * 具体可参考[图片旋转](http://wiki.upyun.com/index.php?title=图片旋转) ## 错误代码表 | HTTP状态码 | 返回代码 | 描述 | | ------------ | ---------- | ---------- | | 400 | Bad Request | 错误请求(如 URL 缺少空间名) | | 401 | Unauthorized | 访问未授权 | | 401 | Sign error | 签名错误(操作员和密码,或签名格式错误) | | 401 | Need Date Header | 发起的请求缺少 Date 头信息 | | 401 | Date offset error | 发起请求的服务器时间错误,请检查服务器时间是否与世界时间一致| | 403 | Not Access | 权限错误(如非图片文件上传到图片空间)| | 403 | File size too max | 单个文件超出大小(100Mb 以内) | | 403 | Not a Picture File | 图片类空间错误码,非图片文件或图片文件格式错误。针对图片空间只允许上传 jpg/png/gif/bmp/tif 格式。| | 403 | Picture Size too max | 图片类空间错误码,图片尺寸太大。针对图片空间,图片总像素在 200000000 以内。| | 403 | Bucket full | 空间已用满 | | 403 | Bucket blocked | 空间被禁用,请联系管理员| | 403 | User blocked | 操作员被禁用| | 403 | Image Rotate Invalid Parameters | 图片旋转参数错误| | 403 | Image Crop Invalid Parameters | 图片裁剪参数错误| | 404 | Not Found | 获取文件或目录不存在;上传文件或目录时上级目录不存在| | 406 | Not Acceptable(path) | 目录错误(创建目录时已存在同名文件;或上传文件时存在同名目录)| | 503 | System Error | 系统错误 |