| @@ -90,8 +90,7 @@ public class VideoController extends BaseController { | |||||
| */ | */ | ||||
| @PostMapping(value = "/upload", consumes = "multipart/*", headers = "content-type=multipart/form-data") | @PostMapping(value = "/upload", consumes = "multipart/*", headers = "content-type=multipart/form-data") | ||||
| @ApiOperation("上传视频") | @ApiOperation("上传视频") | ||||
| @SystemControllerLog(description = "文件上传") | |||||
| public ResultData awsfileUpload(@RequestParam("file") MultipartFile multiReq,@RequestParam Map<String, String> param) { | |||||
| public ResultData upload(@RequestParam("file") MultipartFile multiReq,@RequestParam Map<String, String> param) { | |||||
| try { | try { | ||||
| String title = param.get("title"); | String title = param.get("title"); | ||||
| VideUploadResult result = videoFactory.getExcutor(videoType).uploadLocalVideo(title, multiReq.getInputStream()); | VideUploadResult result = videoFactory.getExcutor(videoType).uploadLocalVideo(title, multiReq.getInputStream()); | ||||
| @@ -101,5 +100,26 @@ public class VideoController extends BaseController { | |||||
| return new ResultData(ErrorCode.PICTURE_ANALYZING_ERROR); | return new ResultData(ErrorCode.PICTURE_ANALYZING_ERROR); | ||||
| } | } | ||||
| } | } | ||||
| /** | |||||
| * 上传视频 | |||||
| * | |||||
| * @param multiReq | |||||
| * @return | |||||
| * @throws Exception | |||||
| */ | |||||
| @GetMapping(value = "/uploadProgress") | |||||
| @ApiOperation("上传视频进度") | |||||
| @ApiImplicitParams({ | |||||
| @ApiImplicitParam(name = "videoId", value = "视频编号", dataType = "String", paramType = "query", required = true)}) | |||||
| public ResultData uploadProgress(String videoId) { | |||||
| try { | |||||
| String result = videoFactory.getExcutor(videoType).getVedioUploadProgress(videoId); | |||||
| return new ResultData(result); | |||||
| } catch (Exception e) { | |||||
| logger.error(e.getMessage()); | |||||
| return new ResultData(ErrorCode.PICTURE_ANALYZING_ERROR); | |||||
| } | |||||
| } | |||||
| } | } | ||||
| @@ -17,4 +17,6 @@ public interface VideoExcutor { | |||||
| //ext,后缀名 | //ext,后缀名 | ||||
| public VideUploadResult uploadNetVideo(String title,String url,String ext); | public VideUploadResult uploadNetVideo(String title,String url,String ext); | ||||
| public String getVedioUploadProgress(String videoId); | |||||
| } | } | ||||
| @@ -4,6 +4,8 @@ import java.util.Map; | |||||
| import java.util.concurrent.ConcurrentHashMap; | import java.util.concurrent.ConcurrentHashMap; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.beans.factory.annotation.Qualifier; | |||||
| import org.springframework.data.redis.core.RedisTemplate; | |||||
| import org.springframework.stereotype.Service; | import org.springframework.stereotype.Service; | ||||
| import com.iformall.video.aliyun.AliyunVideoExcutor; | import com.iformall.video.aliyun.AliyunVideoExcutor; | ||||
| @@ -7,6 +7,8 @@ import java.io.IOException; | |||||
| import java.io.InputStream; | import java.io.InputStream; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.beans.factory.annotation.Qualifier; | |||||
| import org.springframework.data.redis.core.RedisTemplate; | |||||
| import org.springframework.stereotype.Component; | import org.springframework.stereotype.Component; | ||||
| import com.aliyun.vod.upload.resp.UploadStreamResponse; | import com.aliyun.vod.upload.resp.UploadStreamResponse; | ||||
| @@ -28,6 +30,10 @@ public class AliyunVideoExcutor implements VideoExcutor { | |||||
| @Autowired | @Autowired | ||||
| AliyunVideoConfig config; | AliyunVideoConfig config; | ||||
| @Autowired | |||||
| @Qualifier("objectCommonRedisTemplate") | |||||
| RedisTemplate<String, Object> redisTemplate; | |||||
| private String getUrlByVeidoId(String videoId) { | private String getUrlByVeidoId(String videoId) { | ||||
| try { | try { | ||||
| return AliyunVedioServer.getVedioUrl(config, videoId); | return AliyunVedioServer.getVedioUrl(config, videoId); | ||||
| @@ -41,7 +47,7 @@ public class AliyunVideoExcutor implements VideoExcutor { | |||||
| public VideUploadResult uploadLocalVideo(String title,String localFile) { | public VideUploadResult uploadLocalVideo(String title,String localFile) { | ||||
| VideUploadResult result = new VideUploadResult(); | VideUploadResult result = new VideUploadResult(); | ||||
| try { | try { | ||||
| UploadVideoResponse response =AliyunVedioUpload.uploadVideo(config.getAccessKeyId(), config.getAccessKeySecret(),config.getRegionId(), title, localFile); | |||||
| UploadVideoResponse response =AliyunVedioUpload.uploadVideo(config.getAccessKeyId(), config.getAccessKeySecret(),config.getRegionId(), title, localFile,redisTemplate); | |||||
| if (response.isSuccess()) { | if (response.isSuccess()) { | ||||
| result.setVideoId(response.getVideoId()); | result.setVideoId(response.getVideoId()); | ||||
| result.setVideoUrl(getUrlByVeidoId(response.getVideoId())); | result.setVideoUrl(getUrlByVeidoId(response.getVideoId())); | ||||
| @@ -64,7 +70,7 @@ public class AliyunVideoExcutor implements VideoExcutor { | |||||
| VideUploadResult result = new VideUploadResult(); | VideUploadResult result = new VideUploadResult(); | ||||
| UploadStreamResponse response; | UploadStreamResponse response; | ||||
| try { | try { | ||||
| response = AliyunVedioUpload.uploadStream(config.getAccessKeyId(), config.getAccessKeySecret(),config.getRegionId(), title, "", inputStream); | |||||
| response = AliyunVedioUpload.uploadStream(config.getAccessKeyId(), config.getAccessKeySecret(),config.getRegionId(), title, "", inputStream,redisTemplate); | |||||
| if (response.isSuccess()) { | if (response.isSuccess()) { | ||||
| result.setVideoId(response.getVideoId()); | result.setVideoId(response.getVideoId()); | ||||
| result.setVideoUrl(getUrlByVeidoId(response.getVideoId())); | result.setVideoUrl(getUrlByVeidoId(response.getVideoId())); | ||||
| @@ -91,7 +97,7 @@ public class AliyunVideoExcutor implements VideoExcutor { | |||||
| @Override | @Override | ||||
| public VideUploadResult uploadNetVideo(String title,String url,String ext) { | public VideUploadResult uploadNetVideo(String title,String url,String ext) { | ||||
| VideUploadResult result = new VideUploadResult(); | VideUploadResult result = new VideUploadResult(); | ||||
| UploadURLStreamResponse response = AliyunVedioUpload.uploadURLStream(config.getAccessKeyId(), config.getAccessKeySecret(),config.getRegionId(), title, url, ext); | |||||
| UploadURLStreamResponse response = AliyunVedioUpload.uploadURLStream(config.getAccessKeyId(), config.getAccessKeySecret(),config.getRegionId(), title, url, ext,redisTemplate); | |||||
| if (response.isSuccess()) { | if (response.isSuccess()) { | ||||
| result.setVideoId(response.getVideoId()); | result.setVideoId(response.getVideoId()); | ||||
| result.setVideoUrl(getUrlByVeidoId(response.getVideoId())); | result.setVideoUrl(getUrlByVeidoId(response.getVideoId())); | ||||
| @@ -103,4 +109,9 @@ public class AliyunVideoExcutor implements VideoExcutor { | |||||
| } | } | ||||
| return result; | return result; | ||||
| } | } | ||||
| @Override | |||||
| public String getVedioUploadProgress(String videoId) { | |||||
| return AliyunVedioUpload.getUploadProgress(redisTemplate, videoId); | |||||
| } | |||||
| } | } | ||||
| @@ -6,6 +6,8 @@ import java.io.IOException; | |||||
| import java.io.InputStream; | import java.io.InputStream; | ||||
| import java.net.URL; | import java.net.URL; | ||||
| import org.springframework.data.redis.core.RedisTemplate; | |||||
| import com.aliyun.vod.upload.impl.UploadAttachedMediaImpl; | import com.aliyun.vod.upload.impl.UploadAttachedMediaImpl; | ||||
| import com.aliyun.vod.upload.impl.UploadImageImpl; | import com.aliyun.vod.upload.impl.UploadImageImpl; | ||||
| import com.aliyun.vod.upload.impl.UploadM3u8FileImpl; | import com.aliyun.vod.upload.impl.UploadM3u8FileImpl; | ||||
| @@ -103,7 +105,7 @@ public class AliyunVedioUpload { | |||||
| // 任何上传方式文件名必须包含扩展名 | // 任何上传方式文件名必须包含扩展名 | ||||
| String fileName = "/Users/test/video/test.mp4"; | String fileName = "/Users/test/video/test.mp4"; | ||||
| // 本地文件上传 | // 本地文件上传 | ||||
| uploadVideo(accessKeyId, accessKeySecret,"cn-beijing", title, fileName); | |||||
| uploadVideo(accessKeyId, accessKeySecret,"cn-beijing", title, fileName,null); | |||||
| // 待上传视频的网络流地址 | // 待上传视频的网络流地址 | ||||
| String url = "http://test.aliyun.com/video/test.mp4"; | String url = "http://test.aliyun.com/video/test.mp4"; | ||||
| @@ -111,7 +113,7 @@ public class AliyunVedioUpload { | |||||
| // 2.网络流上传 | // 2.网络流上传 | ||||
| // 文件扩展名,当url中不包含扩展名时,需要设置该参数 | // 文件扩展名,当url中不包含扩展名时,需要设置该参数 | ||||
| String fileExtension = "mp4"; | String fileExtension = "mp4"; | ||||
| uploadURLStream(accessKeyId, accessKeySecret, "cn-beijing",title, url, fileExtension); | |||||
| uploadURLStream(accessKeyId, accessKeySecret, "cn-beijing",title, url, fileExtension,null); | |||||
| // 3.文件流上传 | // 3.文件流上传 | ||||
| // testUploadFileStream(accessKeyId, accessKeySecret, title, fileName); | // testUploadFileStream(accessKeyId, accessKeySecret, title, fileName); | ||||
| @@ -130,7 +132,7 @@ public class AliyunVedioUpload { | |||||
| } catch (IOException e) { | } catch (IOException e) { | ||||
| e.printStackTrace(); | e.printStackTrace(); | ||||
| } | } | ||||
| uploadStream(accessKeyId, accessKeySecret, "cn-beijing",title, fileName, inputStream); | |||||
| uploadStream(accessKeyId, accessKeySecret, "cn-beijing",title, fileName, inputStream,null); | |||||
| // 二、图片上传 | // 二、图片上传 | ||||
| @@ -161,7 +163,8 @@ public class AliyunVedioUpload { | |||||
| * @param title | * @param title | ||||
| * @param fileName | * @param fileName | ||||
| */ | */ | ||||
| public static UploadVideoResponse uploadVideo(String accessKeyId, String accessKeySecret,String regionId, String title, String fileName) { | |||||
| public static UploadVideoResponse uploadVideo(String accessKeyId, String accessKeySecret,String regionId, String title, String fileName, | |||||
| RedisTemplate<String, Object> redisTemplate) { | |||||
| UploadVideoRequest request = new UploadVideoRequest(accessKeyId, accessKeySecret, title, fileName); | UploadVideoRequest request = new UploadVideoRequest(accessKeyId, accessKeySecret, title, fileName); | ||||
| /* 可指定分片上传时每个分片的大小,默认为2M字节 */ | /* 可指定分片上传时每个分片的大小,默认为2M字节 */ | ||||
| request.setPartSize(2 * 1024 * 1024L); | request.setPartSize(2 * 1024 * 1024L); | ||||
| @@ -219,7 +222,8 @@ public class AliyunVedioUpload { | |||||
| * @param fileName | * @param fileName | ||||
| * @param url | * @param url | ||||
| */ | */ | ||||
| public static UploadURLStreamResponse uploadURLStream(String accessKeyId, String accessKeySecret,String regionId, String title, String url, String fileExtension) { | |||||
| public static UploadURLStreamResponse uploadURLStream(String accessKeyId, String accessKeySecret,String regionId, String title, | |||||
| String url, String fileExtension,RedisTemplate<String, Object> redisTemplate) { | |||||
| UploadURLStreamRequest request = new UploadURLStreamRequest(accessKeyId, accessKeySecret, title, url); | UploadURLStreamRequest request = new UploadURLStreamRequest(accessKeyId, accessKeySecret, title, url); | ||||
| /* 文件扩展名*/ | /* 文件扩展名*/ | ||||
| @@ -271,7 +275,8 @@ public class AliyunVedioUpload { | |||||
| * @param title | * @param title | ||||
| * @param fileName | * @param fileName | ||||
| */ | */ | ||||
| private static void uploadFileStream(String accessKeyId, String accessKeySecret,String regionId, String title, String fileName) { | |||||
| private static void uploadFileStream(String accessKeyId, String accessKeySecret,String regionId, String title, String fileName, | |||||
| RedisTemplate<String, Object> redisTemplate) { | |||||
| UploadFileStreamRequest request = new UploadFileStreamRequest(accessKeyId, accessKeySecret, title, fileName); | UploadFileStreamRequest request = new UploadFileStreamRequest(accessKeyId, accessKeySecret, title, fileName); | ||||
| /* 是否使用默认水印(可选),指定模板组ID时,根据模板组配置确定是否使用默认水印*/ | /* 是否使用默认水印(可选),指定模板组ID时,根据模板组配置确定是否使用默认水印*/ | ||||
| //request.setShowWaterMark(true); | //request.setShowWaterMark(true); | ||||
| @@ -323,7 +328,8 @@ public class AliyunVedioUpload { | |||||
| * @param fileName | * @param fileName | ||||
| * @param inputStream | * @param inputStream | ||||
| */ | */ | ||||
| public static UploadStreamResponse uploadStream(String accessKeyId, String accessKeySecret,String regionId, String title, String fileName, InputStream inputStream) { | |||||
| public static UploadStreamResponse uploadStream(String accessKeyId, String accessKeySecret,String regionId, String title, | |||||
| String fileName, InputStream inputStream,RedisTemplate<String, Object> redisTemplate) { | |||||
| UploadStreamRequest request = new UploadStreamRequest(accessKeyId, accessKeySecret, title, fileName, inputStream); | UploadStreamRequest request = new UploadStreamRequest(accessKeyId, accessKeySecret, title, fileName, inputStream); | ||||
| /* 是否使用默认水印(可选),指定模板组ID时,根据模板组配置确定是否使用默认水印*/ | /* 是否使用默认水印(可选),指定模板组ID时,根据模板组配置确定是否使用默认水印*/ | ||||
| //request.setShowWaterMark(true); | //request.setShowWaterMark(true); | ||||
| @@ -365,7 +371,7 @@ public class AliyunVedioUpload { | |||||
| * @param accessKeyId | * @param accessKeyId | ||||
| * @param accessKeySecret | * @param accessKeySecret | ||||
| */ | */ | ||||
| public static void uploadImageLocalFile(String accessKeyId, String accessKeySecret,String regionId) { | |||||
| public static void uploadImageLocalFile(String accessKeyId, String accessKeySecret,String regionId,RedisTemplate<String, Object> redisTemplate) { | |||||
| /* 图片类型(必选)取值范围:default(默认),cover(封面),watermark(水印)*/ | /* 图片类型(必选)取值范围:default(默认),cover(封面),watermark(水印)*/ | ||||
| String imageType = "cover"; | String imageType = "cover"; | ||||
| UploadImageRequest request = new UploadImageRequest(accessKeyId, accessKeySecret, imageType); | UploadImageRequest request = new UploadImageRequest(accessKeyId, accessKeySecret, imageType); | ||||
| @@ -409,7 +415,7 @@ public class AliyunVedioUpload { | |||||
| * @param accessKeyId | * @param accessKeyId | ||||
| * @param accessKeySecret | * @param accessKeySecret | ||||
| */ | */ | ||||
| public static void uploadImageStream(String accessKeyId, String accessKeySecret,String regionId) { | |||||
| public static void uploadImageStream(String accessKeyId, String accessKeySecret,String regionId,RedisTemplate<String, Object> redisTemplate) { | |||||
| /* 图片类型(必选)取值范围:default(默认),cover(封面),watermark(水印)*/ | /* 图片类型(必选)取值范围:default(默认),cover(封面),watermark(水印)*/ | ||||
| String imageType = "cover"; | String imageType = "cover"; | ||||
| UploadImageRequest request = new UploadImageRequest(accessKeyId, accessKeySecret, imageType); | UploadImageRequest request = new UploadImageRequest(accessKeyId, accessKeySecret, imageType); | ||||
| @@ -682,4 +688,8 @@ public class AliyunVedioUpload { | |||||
| } | } | ||||
| return null; | return null; | ||||
| } | } | ||||
| public static String getUploadProgress(RedisTemplate<String, Object> redisTemplate,String videoId) { | |||||
| return UploadCacheHelper.getUploadProgress(redisTemplate, PutObjectProgressListener.PRE_VIDEO_PROGRESS+videoId); | |||||
| } | |||||
| } | } | ||||
| @@ -1,5 +1,7 @@ | |||||
| package com.iformall.video.aliyun.sdk.upload; | package com.iformall.video.aliyun.sdk.upload; | ||||
| import org.springframework.data.redis.core.RedisTemplate; | |||||
| import com.aliyun.oss.event.ProgressEvent; | import com.aliyun.oss.event.ProgressEvent; | ||||
| import com.aliyun.oss.event.ProgressEventType; | import com.aliyun.oss.event.ProgressEventType; | ||||
| import com.aliyun.vod.upload.impl.VoDProgressListener; | import com.aliyun.vod.upload.impl.VoDProgressListener; | ||||
| @@ -33,54 +35,63 @@ public class PutObjectProgressListener implements VoDProgressListener { | |||||
| * 图片ID | * 图片ID | ||||
| */ | */ | ||||
| private String imageId; | private String imageId; | ||||
| public static final String PRE_VIDEO_PROGRESS = "video:progress:"; | |||||
| private RedisTemplate<String, Object> redisTemplate; | |||||
| public void progressChanged(ProgressEvent progressEvent) { | public void progressChanged(ProgressEvent progressEvent) { | ||||
| long bytes = progressEvent.getBytes(); | long bytes = progressEvent.getBytes(); | ||||
| ProgressEventType eventType = progressEvent.getEventType(); | ProgressEventType eventType = progressEvent.getEventType(); | ||||
| switch (eventType) { | switch (eventType) { | ||||
| // 开始上传事件 | // 开始上传事件 | ||||
| case TRANSFER_STARTED_EVENT: | case TRANSFER_STARTED_EVENT: | ||||
| if (videoId != null) { | |||||
| System.out.println("qqqqStart to upload videoId " + videoId + "......"); | |||||
| } | |||||
| if (imageId != null) { | |||||
| System.out.println("aaaStart to upload imageId " + imageId + "......"); | |||||
| } | |||||
| if (null != redisTemplate) { | |||||
| if (videoId != null) { | |||||
| UploadCacheHelper.cacheStart(redisTemplate, PRE_VIDEO_PROGRESS+videoId); | |||||
| //System.out.println("qqqqStart to upload videoId " + videoId + "......"); | |||||
| } | |||||
| if (imageId != null) { | |||||
| //System.out.println("aaaStart to upload imageId " + imageId + "......"); | |||||
| } | |||||
| } | |||||
| break; | break; | ||||
| // 计算待上传文件总大小事件通知,只有调用本地文件方式上传时支持该事件 | // 计算待上传文件总大小事件通知,只有调用本地文件方式上传时支持该事件 | ||||
| case REQUEST_CONTENT_LENGTH_EVENT: | case REQUEST_CONTENT_LENGTH_EVENT: | ||||
| this.totalBytes = bytes; | this.totalBytes = bytes; | ||||
| System.out.println(this.totalBytes + "bytes in total will be uploaded to OSS."); | |||||
| //System.out.println(this.totalBytes + "bytes in total will be uploaded to OSS."); | |||||
| break; | break; | ||||
| // 已经上传成功文件大小事件通知 | // 已经上传成功文件大小事件通知 | ||||
| case REQUEST_BYTE_TRANSFER_EVENT: | case REQUEST_BYTE_TRANSFER_EVENT: | ||||
| this.bytesWritten += bytes; | this.bytesWritten += bytes; | ||||
| if (this.totalBytes != -1) { | if (this.totalBytes != -1) { | ||||
| int percent = (int) (this.bytesWritten * 100.0 / this.totalBytes); | int percent = (int) (this.bytesWritten * 100.0 / this.totalBytes); | ||||
| System.out.println(bytes + " bytes have been written at this time, upload progress: " + | |||||
| percent + "%(" + this.bytesWritten + "/" + this.totalBytes + ")"); | |||||
| //System.out.println(bytes + " bytes have been written at this time, upload progress: " + | |||||
| // percent + "%(" + this.bytesWritten + "/" + this.totalBytes + ")"); | |||||
| } else { | } else { | ||||
| System.out.println(bytes + " bytes have been written at this time, upload sub total : " + | |||||
| "(" + this.bytesWritten + ")"); | |||||
| //System.out.println(bytes + " bytes have been written at this time, upload sub total : " + | |||||
| // "(" + this.bytesWritten + ")"); | |||||
| } | } | ||||
| UploadCacheHelper.cacheProgress(redisTemplate, PRE_VIDEO_PROGRESS+videoId,String.valueOf(this.bytesWritten)); | |||||
| break; | break; | ||||
| // 文件全部上传成功事件通知 | // 文件全部上传成功事件通知 | ||||
| case TRANSFER_COMPLETED_EVENT: | case TRANSFER_COMPLETED_EVENT: | ||||
| this.succeed = true; | this.succeed = true; | ||||
| if (videoId != null) { | if (videoId != null) { | ||||
| System.out.println("Succeed to upload videoId " + videoId + " , " + this.bytesWritten + " bytes have been transferred in total."); | |||||
| UploadCacheHelper.cacheComplete(redisTemplate, PRE_VIDEO_PROGRESS+videoId); | |||||
| //System.out.println("Succeed to upload videoId " + videoId + " , " + this.bytesWritten + " bytes have been transferred in total."); | |||||
| } | } | ||||
| if (imageId != null) { | if (imageId != null) { | ||||
| System.out.println("Succeed to upload imageId " + imageId + " , " + this.bytesWritten + " bytes have been transferred in total."); | |||||
| //System.out.println("Succeed to upload imageId " + imageId + " , " + this.bytesWritten + " bytes have been transferred in total."); | |||||
| } | } | ||||
| break; | break; | ||||
| // 文件上传失败事件通知 | // 文件上传失败事件通知 | ||||
| case TRANSFER_FAILED_EVENT: | case TRANSFER_FAILED_EVENT: | ||||
| if (videoId != null) { | if (videoId != null) { | ||||
| UploadCacheHelper.cacheProgress(redisTemplate, PRE_VIDEO_PROGRESS+videoId,String.valueOf(this.bytesWritten)); | |||||
| System.out.println("Failed to upload videoId " + videoId + " , " + this.bytesWritten + " bytes have been transferred."); | System.out.println("Failed to upload videoId " + videoId + " , " + this.bytesWritten + " bytes have been transferred."); | ||||
| } | } | ||||
| if (imageId != null) { | if (imageId != null) { | ||||
| System.out.println("Failed to upload imageId " + imageId + " , " + this.bytesWritten + " bytes have been transferred."); | |||||
| //System.out.println("Failed to upload imageId " + imageId + " , " + this.bytesWritten + " bytes have been transferred."); | |||||
| } | } | ||||
| break; | break; | ||||
| @@ -0,0 +1,37 @@ | |||||
| package com.iformall.video.aliyun.sdk.upload; | |||||
| import java.util.concurrent.TimeUnit; | |||||
| import org.springframework.data.redis.core.RedisTemplate; | |||||
| import org.springframework.data.redis.core.ValueOperations; | |||||
| public class UploadCacheHelper { | |||||
| public static void cacheStart(RedisTemplate<String, Object> template,String key) { | |||||
| ValueOperations<String, Object> operations = template.opsForValue(); | |||||
| operations.set(key, "begin", 24*3600,TimeUnit.SECONDS); | |||||
| } | |||||
| public static void cacheComplete(RedisTemplate<String, Object> template,String key) { | |||||
| ValueOperations<String, Object> operations = template.opsForValue(); | |||||
| operations.set(key, "complete", 24*3600,TimeUnit.SECONDS); | |||||
| } | |||||
| public static void cacheProgress(RedisTemplate<String, Object> template,String key,String bytes) { | |||||
| ValueOperations<String, Object> operations = template.opsForValue(); | |||||
| operations.set(key, bytes, 24*3600,TimeUnit.SECONDS); | |||||
| } | |||||
| public static String getUploadProgress(RedisTemplate<String, Object> template,String key) { | |||||
| if (template.hasKey(key)) { | |||||
| ValueOperations<String, Object> operations = template.opsForValue(); | |||||
| Object o = operations.get(key); | |||||
| if (o instanceof String) { | |||||
| return (String)o; | |||||
| } | |||||
| } | |||||
| return null; | |||||
| } | |||||
| } | |||||