栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

腾讯云COS对象储存实现文件上传进度表显示

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

腾讯云COS对象储存实现文件上传进度表显示

Java连接腾讯云COS对象储存实现文件上传接口详细配置 和 Java连接本地redis往期的文章,这篇文章建立在这一篇上。

文件上传的时候将对应进度,将进度保存在redis中,进度监听如果进度变更,则更新redis中的值,前端调用接口访问redis中的进度值,如果为100则断开请求。这里我查了几篇文章但是都不是很全,故而我

    @Autowired
    private PutObjectProgressListener putObjectProgressListener;

    
    @Override
    public  ResponseDto uploadOSSToll(MultipartFile file) {
        ResponseDto responseDto = null;
        String originalfileName = file.getOriginalFilename();
        //设置文件key
        String filePath = getFileKey(originalfileName);
        
        File f = null;
        try {
            f = File.createTempFile("tmp", null);
            file.transferTo(f);
            f.deleteOnExit();
        } catch (Exception e) {
            e.printStackTrace();
        }
        // 将对应的值设置到PutObjectProgressListener,
        putObjectProgressListener.setKeyRedos(originalfileName,f.length());
        // 上传 --> 带进度条上传
        cosClient.putObject(new PutObjectRequest(bucketName, originalfileName, f)
                .withGeneralProgressListener(putObjectProgressListener));
        // 关闭client
        cosClient.shutdown();
        String url = path + "/" + filePath;
        Map map = new HashMap<>();
        map.put("fileName", originalfileName);
        map.put("url", url);
        return new ResponseDto(10000, "成功并返回数据", map);
    }

putObjectProgressListener 便是进度监控,setKeyRedos方法将对应的值进行初始化

@Component
public class PutObjectProgressListener implements ProgressListener {

    private long bytesWritten = 0;
    private long totalBytes = -1;
    private String key = "";
    private int percent = 0;
    private boolean succeed = false;
    
    @Autowired
   private StringRedisTemplate redisTemplate;


    public void setKeyRedos(String key, Long size) {
        this.totalBytes = size;
        this.key = key;
        redisTemplate.opsForValue().set(key, String.valueOf(percent));
    }

    @Override
    public void progressChanged(ProgressEvent progressEvent) {
        long bytes = progressEvent.getBytes();
        ProgressEventType eventType = progressEvent.getEventType();
        switch (eventType) {
            case TRANSFER_STARTED_EVENT:
                break;
            case REQUEST_CONTENT_LENGTH_EVENT:
                this.totalBytes = bytes;
                break;
            case REQUEST_BYTE_TRANSFER_EVENT:
                this.bytesWritten += bytes;
                if (this.totalBytes != -1) {
                    int percent = (int) (this.bytesWritten * 100.0 / this.totalBytes);
                    //将进度percent放入redis中
                    redisTemplate.opsForValue().set(key, String.valueOf(percent));
                }
                break;
            case TRANSFER_COMPLETED_EVENT:
                this.succeed = true;
                break;
            case TRANSFER_FAILED_EVENT:
                break;
            default:
                break;
        }
    }
}

这里便实现了进度监视。这里设置了文件限制的大小,一般小文件不需要去显示进度表。

#multipart文件限制大小
spring.servlet.multipart.max-file-size=500MB
spring.servlet.multipart.max-request-size=500MB


redis中显示为53


当上传成功之后,redis中的值便是100了。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/351087.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号