SpringBoot3.* 集成又拍云上传组件

集成使用

添加Maven依赖

xml 复制代码
<!--又拍云-->
<dependency>
    <groupId>com.upyun</groupId>
    <artifactId>java-sdk</artifactId>
    <version>4.2.3</version>
</dependency>

代码编写

java 复制代码
@PostMapping("/common/upload")
public String upload (MultipartFile file) throws UpException, IOException {
	String trueFileName =file.getOriginalFilename();
	String fileName = UUID.randomUUID().toString()+trueFileName;

	// 上传到又拍云

	RestManager manager = new RestManager("空间名","用户名","密码");
	
	Map<String, String> params = new HashMap<>();
	// 设置待上传文件的 Content-MD5 值
	// 如果又拍云服务端收到的文件MD5值与用户设置的不一致,将回报 406 NotAcceptable 错误
	params.put(RestManager.PARAMS.CONTENT_MD5.getValue(), UpYunUtils.md5(file.getBytes()));
	
	String path = "/path/to/file"+fileName;
	Response result = manager.writeFile(path, file.getBytes(), params);
	if (result.isSuccessful()) {
		return "https://你的域名" + path;
	} else {
		// 上传失败
		return "上传失败["+result.code()+"]: "+result.message();
	}
}

测试调用

附·官方SDK文档

云存储基础接口

初始化 RestManager

Java 复制代码
	RestManager manager = new RestManager("空间名称", "操作员名称", "操作员密码");

可选属性:

  • 设置代理
Java 复制代码
    manager.setProxy(proxy);
  • 手动设置超时时间:默认为30秒
Java 复制代码
    manager.setTimeout(60);
  • 选择最优的接入点
Java 复制代码
    manager.setApiDomain(RestManager.ED_AUTO);

根据国内的网络情况,又拍云存储 API 目前提供了电信、联通网通、移动铁通三个接入点。可以通过setApiDomain()方法进行设置,默认将根据网络条件自动选择接入点。
接入点有四个值可选:

Java 复制代码
	RestManager.ED_AUTO    //根据网络条件自动选择接入点
	RestManager.ED_TELECOM //电信接入点
	RestManager.ED_CNC     //联通网通接入点
	RestManager.ED_CTT     //移动铁通接入点

**注:**建议大家根据服务器网络状况,手动设置合理的接入点已获取最佳的访问速度


创建目录

方法原型:

Java 复制代码
	public Response mkDir(String path);

参数说明:

  • path 目录路径,以/结尾

返回值说明:

  • 返回 Response

举例说明:

Java 复制代码
	String path = "/dir1/dir2/";
    // 创建目录,自动创建父级目录
    Response result = manager.mkDir(path);

删除目录

方法原型:

Java 复制代码
	public Response rmDir(String path);

参数说明:

  • path 目录路径

返回值说明:

  • 结果为 true 删除目录成功
  • 若待删除的目录 path 下还存在任何文件或子目录,将返回『不允许删除』的错误

举例说明:

Java 复制代码
	String path = "/dir1/dir2/";
    // 删除目录
    Response result = manager.rmDir(path); 

获取目录文件列表

方法原型:

Java 复制代码
	public Response readDirIter(String path,Map<String, String> params);

参数说明:

  • path 目录路径
  • params 可选参数

举例说明:

Java 复制代码
	String path = "/dir1/";
    // 获取目录中文件列表
    Response response = manager.readDirIter(path,null);
    System.out.println(response.body().string());

上传文件

方法原型:

Java 复制代码
public Response writeFile(String filePath, byte[] data, Map<String, String> params)
public Response writeFile(String filePath, File file, Map<String, String> params)
public Response writeFile(String filePath, InputStream inputStream, Map<String, String> params)

参数说明:

  • filePath 保存到又拍云存储的文件路径,以/开始
  • 第二个参数 接受 InputStream Filebyte[] 三种类型的数据
  • params 上传额外可选参数,详见 api 文档

返回值说明:

  • response.isSuccessful() 结果为 true 上传文件成功

举例说明:

Java 复制代码
    // 例1:上传纯文本内容,自动创建父级目录
    String str = "Hello RestManager";
    Map<String, String> params = new HashMap<String, String>();
        // 设置待上传文件的 Content-MD5 值
        // 如果又拍云服务端收到的文件MD5值与用户设置的不一致,将回报 406 NotAcceptable 错误
    params.put(PARAMS.CONTENT_MD5.getValue(), UpYunUtils.md5(file, 1024));

        // 设置待上传文件的"访问密钥"
        // 注意:
        // 仅支持图片空!,设置密钥后,无法根据原文件URL直接访问,需带URL后面加上(缩略图间隔标志符+密钥)进行访问
        // 举例:
        // 如果缩略图间隔标志符为"!",密钥为"bac",上传文件路径为"/folder/test.jpg",
        // 那么该图片的对外访问地址为:http://空间域名 /folder/test.jpg!bac
    params.put(PARAMS.CONTENT_SECRET.getValue(), "bac");
    Response result = manager.writeFile("/path/to/file", str, params);
    

注:
若空间内指定目录已存在相同文件,则会被覆盖,且
不可逆* 。若要避免此情况,可以先通过[获取文件信息](#注: 若空间内指定目录已存在相同文件,则会被覆盖,且不可逆。若要避免此情况,可以先通过获取文件信息来判断是否已经存在相同文件)来判断是否已经存在相同文件*


获取文件信息

方法原型:

Java 复制代码
public Response getFileInfo(String filePath)

参数说明:

  • filePath 又拍云中文件的路径

返回值说明:

  • response.headers 信息:
  • x-upyun-file-type 文件类型
  • x-upyun-file-size 文件大小
  • x-upyun-file-date 创建日期
  • Content-Md5 文件的 MD5 值

举例说明:

Java 复制代码
	String filePath = "/path/to/file";
	System.out.println(filePath + " 的文件信息:" + restManager.getFileInfo(filePath).headers());

获取使用量信息

方法原型:

Java 复制代码
	public Resoponse getBucketUsage();

举例说明:

Java 复制代码
	Response response = restManager.getBucketUsage();
	System.out.println("空间总使用量:" + response.body().string() + "B");    	

返回值说明:

  • 返回值单位为 Byte

下载文件

方法原型:

Java 复制代码
	public Response readFile(String filePath);

参数说明:

  • filePath 文件在又拍云存储中的路径

返回值说明:

  • response.body() 包含文件流信息

举例说明:

Java 复制代码
    // 直接打印文本内容
    String remoteFilePath = "/path/to/file";
    System.out.println(filePath + " 的文件内容:" + response.body().string());

删除文件

方法原型:

Java 复制代码
	public Response deleteFile(String filePath,Map<String, String> params);

参数说明:

  • filePath 文件在又拍云的路径
  • params 可选参数 可为 null

返回值说明:

  • response.isSuccessful() 结果为 true 删除文件成功

举例说明:

Java 复制代码
	Response response = restManager.deleteFile(filePath, null);
	System.out.println(filePath + " 删除" + isSuccess(response));

移动文件

方法原型:

Java 复制代码
	public Response moveFile(String path, String sourcePath, Map<String, String> params);

参数说明:

  • path 目标路径
  • sourcePath 源文件路径

返回值说明:

  • 返回 Response

复制文件

方法原型:

Java 复制代码
	public Response copyFile(String path, String sourcePath, Map<String, String> params);

参数说明:

  • path 目标路径
  • sourcePath 源文件路径

返回值说明:

  • 返回 Response

串行式断点续传

初始化 SerialUploader

java 复制代码
	SerialUploader resume = new SerialUploader("空间名称", "操作员名称", "操作员密码")

设置上传进度监听

java 复制代码
	 resume.setOnProgressListener(new BaseUploader.OnProgressListener()

设置 MD5 校验

java 复制代码
	resume.setCheckMD5(true);

开始上传

java 复制代码
	public boolean upload(String filePath, String uploadPath,Map<String, String> params)	

暂停

java 复制代码
	public boolean pause()	

继续

java 复制代码
	public boolean resume()	

并行式断点续传

初始化 ParallelUploader

java 复制代码
	ParallelUploader paralleUploader = new ParallelUploader("空间名称", "操作员名称", "操作员密码")

设置上传进度监听

java 复制代码
	 paralleUploader.setOnProgressListener(new ResumeUploader.OnProgressListener()

设置 MD5 校验

java 复制代码
	paralleUploader.setCheckMD5(true);

设置 并行数 校验

java 复制代码
	paralleUploader.setParallel(4);

开始上传

java 复制代码
	public boolean upload(String filePath, String uploadPath,Map<String, String> params)	

暂停

java 复制代码
	public boolean pause()	

继续

java 复制代码
	public boolean resume()	

参数说明:

  • filePath 待上传文件路径
  • uploadPath 上传至空间目录
  • params 通用可选上传参数见文档 可为null

详细示例:

ResumeUploadDemo


表单上传接口

初始化 FormUploader

java 复制代码
 	public FormUploader(String bucketName, String userName, String password) 

参数说明:

  • bucketName 空间名
  • userName 操作员
  • password 密码

可选属性:

  • 手动设置超时时间:默认为30秒
java 复制代码
	public void setTimeout(int timeout)
  • 选择最优的接入点,默认 v0.api.upyun.com
Java 复制代码
    public void setApiDomain(String domain)
  • 选择默认过期时间,默认1800秒
java 复制代码
	public void setExpiration(int expiration)

表单上传文件

方法原型:

java 复制代码
	public Result upload(Map<String, Object> params, File file) 
	public Result upload(Map<String, Object> params, byte[] datas) 

参数说明:

  • params 参数键值对
  • file 上传文件
  • datas 上传数组

参数键值对中 Params.SAVE_KEY 为必选参数,其他可选参数见 Params 或者官网 API 文档

返回说明:

  • Result.Succeed 是否成功
  • Result.code 返回http消息码
  • Result.msg 返回消息

举例说明:

表单上传示例可见FormUploadDemo

###表单上传作图

上传同步作图

java 复制代码
     private static void testSync() {
        //初始化uploader
        FormUploader uploader = new FormUploader(BUCKET_NAME, APIKEY, null);

        //初始化参数组 Map
        final Map<String, Object> paramsMap = new HashMap<String, Object>();

        //添加 SAVE_KEY 参数
        paramsMap.put(Params.SAVE_KEY, savePath);

        //添加同步上传作图参数 X_GMKERL_THUMB
        paramsMap.put(Params.X_GMKERL_THUMB, "/fw/300/unsharp/true/quality/80/format/png");

        //打印结果
        System.out.println(uploader.upload(paramsMap, file));
    }	

paramsMap 添加键值对,Params.X_GMKERL_THUMB 为 key,作图规则见上传作图 API

上传异步作图

java 复制代码
	 private static void testAsync() {
        //uploader
        FormUploader uploader = new FormUploader(BUCKET_NAME, APIKEY, null);

        //初始化参数组 Map
        final Map<String, Object> paramsMap = new HashMap<String, Object>();

        //添加 SAVE_KEY 参数
        paramsMap.put(Params.SAVE_KEY, savePath);

        //初始化JSONArray
        JSONArray array = new JSONArray();

        //初始化JSONObject
        JSONObject json = new JSONObject();

        //json 添加 name 属性
        json.put("name", "thumb");

        //json 添加 X_GMKERL_THUMB 属性
        json.put(Params.X_GMKERL_THUMB, "/fw/300/unsharp/true/quality/80/format/png");

        //json 添加 save_as 属性
        json.put("save_as", "/path/to/fw_100.jpg");

        //json 添加 notify_url 属性
        json.put("notify_url","http://httpbin.org/post");

        //将json 对象放入 JSONArray
        array.put(json);

        //添加异步作图参数 APPS
        paramsMap.put(Params.APPS, array);

        //打印结果
        System.out.println(uploader.upload(paramsMap, file));
    }

paramsMap 添加键值对,Params.APPS 为 key,作图规则见上传作图 API

处理

异步音视频处理

初始化 MediaHandler
java 复制代码
	MediaHandler handle = new MediaHandler(BUCKET_NAME, OPERATOR_NAME, OPERATOR_PWD);

参数说明:

  • BUCKET_NAME 空间名
  • OPERATOR_NAME 操作员名称
  • OPERATOR_PWD 操作员密码

可选属性:

  • 手动设置超时时间:默认为30秒
java 复制代码
	public void setTimeout(int timeout)

发起异步处理请求

方法原型:

java 复制代码
	 public Result process(Map<String, Object> params) throws IOException 

参数说明:

  • params 参数键值对

详细参数可见 MediaHandler 或者官网 API 文档

返回说明:

  • Result.Succeed 是否成功
  • Result.code 返回http消息码
  • Result.msg 返回消息

举例说明:

示例可见testMediaProcess

查询处理进度

方法原型:

java 复制代码
	 public Result getStatus(Map<String, Object> params) throws IOException 

参数说明:

  • params 参数键值对 包括 bucket_nametask_ids

返回说明:

同上

举例说明:

示例可见testMediaStatus

查询处理结果

方法原型:

java 复制代码
	 public Result getResult(Map<String, Object> params) throws IOException

参数说明:

同上

返回说明:

同上

举例说明:

示例可见testMediaResult

压缩解压缩

初始化 CompressHandler
java 复制代码
	MediaHandler handle = new MediaHandler(BUCKET_NAME, OPERATOR_NAME, OPERATOR_PWD);

参数说明:

  • BUCKET_NAME 空间名
  • OPERATOR_NAME 操作员名称
  • OPERATOR_PWD 操作员密码
发起异步处理请求
java 复制代码
	 public Result process(Map<String, Object> params) throws IOException 

参数说明:

  • params 参数键值对

详细参数可见 CompressHandler 或者官网 API 文档

详细示例见 CompressDemo

异步文件拉取

初始化 CompressHandler
java 复制代码
	MediaHandler handle = new MediaHandler(BUCKET_NAME, OPERATOR_NAME, OPERATOR_PWD);

参数说明:同上

发起异步处理请求
java 复制代码
	 public Result process(Map<String, Object> params) throws IOException 

参数说明:

  • params 参数键值对

详细参数可见 PullingHandler 或者官网 API 文档

详细示例见 PullingDemo

文档转换

初始化 CompressHandler
java 复制代码
	ConvertHandler handle = new ConvertHandler(BUCKET_NAME, OPERATOR_NAME, OPERATOR_PWD);

参数说明:同上

发起异步处理请求
java 复制代码
	 public Result process(Map<String, Object> params) throws IOException 

参数说明:

  • params 参数键值对

详细参数可见 ConvertHandler 或者官网 API 文档

详细示例见 JigsawDemo

图片拼接

初始化 JigsawHandler
java 复制代码
	JigsawHandler handle = new JigsawHandler(BUCKET_NAME, OPERATOR_NAME, OPERATOR_PWD);

参数说明:同上

发起异步处理请求
java 复制代码
	 public Result process(Map<String, Object> params) throws IOException 

参数说明:

  • params 参数键值对

详细参数可见 JigsawHandler 或者官网 API 文档

详细示例见 JigsawDemo

##错误说明

请参照 API 错误码表

相关推荐
sky丶Mamba7 分钟前
Spring Boot中获取application.yml中属性的几种方式
java·spring boot·后端
数据龙傲天33 分钟前
1688商品API接口:电商数据自动化的新引擎
java·大数据·sql·mysql
带带老表学爬虫1 小时前
java数据类型转换和注释
java·开发语言
千里码aicood1 小时前
【2025】springboot教学评价管理系统(源码+文档+调试+答疑)
java·spring boot·后端·教学管理系统
彭于晏6891 小时前
Android广播
android·java·开发语言
程序员-珍2 小时前
使用openapi生成前端请求文件报错 ‘Token “Integer“ does not exist.‘
java·前端·spring boot·后端·restful·个人开发
2401_857297912 小时前
招联金融2025校招内推
java·前端·算法·金融·求职招聘
福大大架构师每日一题2 小时前
23.1 k8s监控中标签relabel的应用和原理
java·容器·kubernetes
金灰2 小时前
HTML5--裸体回顾
java·开发语言·前端·javascript·html·html5
菜鸟一皓2 小时前
IDEA的lombok插件不生效了?!!
java·ide·intellij-idea