Web直传解决并发上传出错,导致任务停止

本文涉及的产品
对象存储 OSS,20GB 3个月
云备份 Cloud Backup,100GB 3个月
文件存储 NAS,50GB 3个月
简介: Web直传

Web直传解决并发上传出错,导致任务停止

OSS提供了Web直传示例的示例

但是上述事例有一个现象
就是当一个文件在上传过程中,这个时候再选择一个不符合条件的文件,会导致正在上传的文件终止。

如此图

  1. 首先我们来分析一下为什么会出现这种现象
    出现这种现象的原因是:plupload这个控件导致的。

plupload提示了filter

var uploader = new plupload.Uploader({
    runtimes : 'html5,flash,silverlight,html4',
    browse_button : 'selectfiles',
    //multi_selection: false,
    container: document.getElementById('container'),
    flash_swf_url : 'lib/plupload-2.1.2/js/Moxie.swf',
    silverlight_xap_url : 'lib/plupload-2.1.2/js/Moxie.xap',
    url : 'http://oss.aliyuncs.com',

    /*
    注意在这里添过加滤的功能,会打断正在上传的队列。如果想选择错误的文件不打断,请在FileFilterd这个函数里面添加过滤的逻辑
    */
    filters: {
        mime_types : [ //只允许上传图片和zip,rar文件
        { title : "Image files", extensions : "jpg,gif,png,bmp" },
        { title : "Zip files", extensions : "zip,rar" }
        ],
        //max_file_size : '10mb', //最大只能上传10mb的文件
        prevent_duplicates : true //不允许选取重复文件
    },

filters参数指定上传时指定plupload会对上传文件的限制。我们来看一下。如果此时再上传一个非法的条件,会出现什么情况。要看一下plupload的源码


plupload.addFileFilter('max_file_size', function(maxSize, file, cb) {
    var undef;

    maxSize = plupload.parseSize(maxSize);

    // Invalid file size
    if (file.size !== undef && maxSize && file.size > maxSize) {
        this.trigger('Error', {
            code : plupload.FILE_SIZE_ERROR,
            message : plupload.translate('File size error.'),
            file : file
        });
        cb(false);
    } else {
        cb(true);
    }
});

这样就当发现文件大小出错之后,就出现文件尺寸出错了。直接跳到出错了。会跳转到上层的Error函数。相应的上传也出现了停止。

解决的方法

这个问题解决思路是自己实现Filter函数,因为用默认的函数,会触发代码的出错处理流程。我们自己采用自己的出错逻辑。如果出现,只报错,不影响正在处理的请求。

plupload提供了很多“勾子函数”,方便对各种情况下进行处理。我们现在增加一个函数:
FileFiltered
这个函数会在文件添加后触发。函数的逻辑就是,判断大小是不是符合。如果不符合,提示出错信息,然后将文件从插件remove

如果成功,就添加文件。

        FileFiltered : function(up, file) {
            /*
            在这里做过滤文件 上传的动作,避免解决因为上传文件有问题下在上传的队列出错。如果要实现这个,需要把filters相关功能禁止。在这里实现相关的功实现过滤的需求。
            */
            if (file.size < 5 * 1024 * 1024)
            {
                document.getElementById('console').appendChild(document.createTextNode(file.name + " is too small to upload"));
                up.removeFile(file)
            }
            else if (file.size > 100 * 1024 * 1024)
            {
                document.getElementById('console').appendChild(document.createTextNode(file.name + " is too large to upload"));
                up.removeFile(file)
            }
            else
            {
                document.getElementById('ossfile').innerHTML += '<div id="' + file.id + '">' + file.name + ' (' + plupload.formatSize(file.size) + ')<b></b>'
                +'<div class="progress"><div class="progress-bar" style="width: 0%"></div></div>'
                +'</div>';
            }
        },
目录
相关文章
|
安全 前端开发 JavaScript
互联网并发与安全系列教程(07) - 常见的Web安全漏洞(其它漏洞)
互联网并发与安全系列教程(07) - 常见的Web安全漏洞(其它漏洞)
126 0
|
安全 NoSQL Java
互联网并发与安全系列教程(06) - 常见的Web安全漏洞(CSRF攻击)
互联网并发与安全系列教程(06) - 常见的Web安全漏洞(CSRF攻击)
142 0
|
Apache Windows
ApacheBench测试Web并发
ApacheBench测试Web并发
|
6月前
|
开发框架 缓存 .NET
并发请求太多,服务器崩溃了?试试使用 ASP.NET Core Web API 操作筛选器对请求进行限流
并发请求太多,服务器崩溃了?试试使用 ASP.NET Core Web API 操作筛选器对请求进行限流
273 0
|
6月前
|
前端开发 JavaScript 大数据
React与Web Workers:开启前端多线程时代的钥匙——深入探索计算密集型任务的优化策略与最佳实践
【8月更文挑战第31天】随着Web应用复杂性的提升,单线程JavaScript已难以胜任高计算量任务。Web Workers通过多线程编程解决了这一问题,使耗时任务独立运行而不阻塞主线程。结合React的组件化与虚拟DOM优势,可将大数据处理等任务交由Web Workers完成,确保UI流畅。最佳实践包括定义清晰接口、加强错误处理及合理评估任务特性。这一结合不仅提升了用户体验,更为前端开发带来多线程时代的全新可能。
153 1
|
7月前
|
消息中间件 JavaScript Java
关于如何提高Web服务端并发效率的异步编程技术
【7月更文挑战第4天】异步编程技术是提升Web服务并发效率的关键。包括: 1. 事件驱动编程,如Node.js的事件回调; 2. 异步任务队列,利用消息队列如RabbitMQ或Kafka解耦处理; 3. 异步I/O,Java的CompletableFuture实现非阻塞操作; 4. 协程,Python的async/await提供同步感的异步执行; 5. 线程/进程池,通过固定资源池管理并发任务,减少系统开销。 这些技术能增强系统性能和响应速度。然而,异步编程也需考虑正确性、稳定性和调试挑战。
111 6
|
8月前
|
Java 应用服务中间件 Apache
安装和配置Apache Tomcat是部署Java Web应用程序的常见任务
安装和配置Apache Tomcat是部署Java Web应用程序的常见任务
201 7
|
8月前
|
机器学习/深度学习 人工智能 Apache
人工智能平台PAI操作报错合集之alink任务可以在本地运行,上传到flink web运行就报错,如何解决
阿里云人工智能平台PAI (Platform for Artificial Intelligence) 是阿里云推出的一套全面、易用的机器学习和深度学习平台,旨在帮助企业、开发者和数据科学家快速构建、训练、部署和管理人工智能模型。在使用阿里云人工智能平台PAI进行操作时,可能会遇到各种类型的错误。以下列举了一些常见的报错情况及其可能的原因和解决方法。
|
9月前
|
存储 人工智能 应用服务中间件
Web应用是一种通过互联网浏览器和网络技术在互联网上执行任务的计算机程序
【5月更文挑战第30天】Web应用是一种通过互联网浏览器和网络技术在互联网上执行任务的计算机程序
133 2
|
8月前
|
Java API 调度
Web后端Javaee企业级开发之定时任务 Springboot整合任务框架Quartz和Task详解
Web后端Javaee企业级开发之定时任务 Springboot整合任务框架Quartz和Task详解
111 0