Skip to content
This repository has been archived by the owner on Aug 22, 2022. It is now read-only.

如何判断文件是否上传成功? #136

Open
2betop opened this issue Apr 3, 2014 · 38 comments
Open

如何判断文件是否上传成功? #136

2betop opened this issue Apr 3, 2014 · 38 comments

Comments

@2betop
Copy link
Contributor

2betop commented Apr 3, 2014

默认如果啥也不处理,只要有返回数据就认为是成功,就算返回的是错误信息,也认为是成功了。

但是,在认为成功前会派送一个事件uploadAccept,这个事件是用来询问是否上传成功的。在这个事件中你可以拿到上传的是哪个文件,以及对应的服务端返回reponse

uploader.on( 'uploadAccept', function( file, response ) {
    if ( hasError ) {
        // 通过return false来告诉组件,此文件上传有错。
        return false;
    }
});

response是个对象,如果服务器返回是json格式,那么正和你意,都已经解析好了,如果不是json格式,response._raw里面可以拿到原始数据。所以,webuploader对于后端返回的数据格式是没有要求的。

@tokki
Copy link

tokki commented May 26, 2014

这个东西很重要 翻了半天才找到-,- 建议把他写在 快速入门的demo里面

@tokki
Copy link

tokki commented May 26, 2014

还有自己扩展post数据的那个参数 formData

@2betop
Copy link
Contributor Author

2betop commented May 26, 2014

@tokki 好的,加个频道叫 faq 连接到这里来。:)

@5080130
Copy link

5080130 commented Sep 22, 2014

以前 uploadSuccess(file,data)的data不是返回的json字符串吗?为什么现在变成 uploadAccept

@xiangpaopao
Copy link

赞 我的疑虑在issues里都找到答案了

@ghost
Copy link

ghost commented Nov 12, 2014

您好,能否给个返回服务端数据的代码sample,我刚入门,按照以下代码一直得不到数据
uploader.on('uploadSuccess', function(file, response) {
alert(response.result);
});

@xiangpaopao
Copy link

@mxd43301 server目录不是有php的例子么

@ghost
Copy link

ghost commented Nov 12, 2014

谢谢您花费宝贵时间回复~我是一个学生,现在做一个课题,之前一直写的是asp,所以php不太懂,但是可以勉强看,我看了下php的例子,例子确实可以获取文件名字,但是文件名字是原名(原名容易覆盖,所以不得不处理使得图片名字变成了年月日相关的md5字符串),于是我把server:fileupload.php这个处理文件,换成了风声无组件上传的upload.asp,这个上传文件能成功,名字也变成了年月日相关的md5字符串如下图,随之也带来一个问题---怎么获得上传成功的文件名(这个要写入数据库表中),我初学不太明白,能否请您指教下~~我折腾了两天文档,文档说这个函数可以获得数据,但我一直不能利用这个对象,得到文件名。
uploader.on('uploadSuccess', function(file, response) {
alert(response.name);
});

谢谢您了~

------------------ 原始邮件 ------------------
发件人: "象跑跑"[email protected];
发送时间: 2014年11月12日(星期三) 中午1:57
收件人: "fex-team/webuploader"[email protected];
抄送: "漆 黑 之 牙 ~ "[email protected];
主题: Re: [webuploader] 如何判断文件是否上传成功? (#136)

@mxd43301 server目录不是有php的例子么


Reply to this email directly or view it on GitHub.

@ghost
Copy link

ghost commented Nov 12, 2014

之前我用的组件是uploadify,处理文件都是upload.asp,他的获取文件名方式是在html端,这个案例主要调用了 onComplete函数,解析了json数据,获得了filetext.name 然后提交表单,进入数据库表的
我不知道webupload怎么在html端设置这个函数

$(document).ready(function() {
$('#uploadify').uploadify({
//前面配置部分我省略了,

'onComplete':function(event,queueID,fileObj,response,data){ //上传成功执行

//返回服务端JSON数据,可在服务端修改返回数据类型
var filetext=eval("(" + response + ")") //解析JSON数据

 $("#RequestText").prepend('<input type="hidden"  name = "article_img" value="article/'+filetext.savename+'">');

});
});

------------------ 原始邮件 ------------------
发件人: "我自己的邮箱";[email protected];
发送时间: 2014年11月12日(星期三) 下午2:09
收件人: "fex-team/webuploader"[email protected]; "fex-team/webuploader"[email protected];

主题: 回复: [webuploader] 如何判断文件是否上传成功? (#136)

谢谢您花费宝贵时间回复~我是一个学生,现在做一个课题,之前一直写的是asp,所以php不太懂,但是可以勉强看,我看了下php的例子,例子确实可以获取文件名字,但是文件名字是原名(原名容易覆盖,所以不得不处理使得图片名字变成了年月日相关的md5字符串),于是我把server:fileupload.php这个处理文件,换成了风声无组件上传的upload.asp,这个上传文件能成功,名字也变成了年月日相关的md5字符串如下图,随之也带来一个问题---怎么获得上传成功的文件名(这个要写入数据库表中),我初学不太明白,能否请您指教下~~我折腾了两天文档,文档说这个函数可以获得数据,但我一直不能利用这个对象,得到文件名。
uploader.on('uploadSuccess', function(file, response) {
alert(response.name);
});

谢谢您了~

------------------ 原始邮件 ------------------
发件人: "象跑跑"[email protected];
发送时间: 2014年11月12日(星期三) 中午1:57
收件人: "fex-team/webuploader"[email protected];
抄送: "漆 黑 之 牙 ~ "[email protected];
主题: Re: [webuploader] 如何判断文件是否上传成功? (#136)

@mxd43301 server目录不是有php的例子么


Reply to this email directly or view it on GitHub.

@sky20054122
Copy link

@mxd43301 参数有file的地方都可以获取文件名称 file.name 多使用js调试,就可以看到每个变量里面包含哪些东西。
image

@shenlongb
Copy link

关闭页面(iframe)在打开就会出现 下面情况

-1

环境 在C语言写的游戏客户端下 win7+ie9

@anyexinglu
Copy link

uploader.on( 'uploadAccept', function( file, response ) {
if ( hasError ) {
// 通过return false来告诉组件,此文件上传有错。
return false;
}
});

报错: Uncaught ReferenceError: hasError is not defined,请问怎么解决哈~

@wangmeijian
Copy link

IE8、9下面为什么上传png、gif、bmp格式的图片成功却提示失败?

@danquxunhuan
Copy link

请教一下,我文件上传成功了,server端返回的数据如何接收呢?在线等,急急急

@coolxiaoyi
Copy link

@danquxunhuan
看这个
http://fex.baidu.com/webuploader/doc/index.html 页面搜索uploadAccept
image

uploadAccept
object {Object}
ret {Object}服务端的返回数据,json格式,如果服务端不是json格式,从ret._raw中取数据,自行解析。
当某个文件上传到服务端响应后,会派送此事件来询问服务端响应是否有效。如果此事件handler返回值为false, 则此文件将派送server类型的uploadError事件。

@Edward-GU
Copy link

uploadAccept只是表示数据已经传到服务端了,至于服务端处理结果,WebUploader不管,服务端返回什么都认为上传成功。只有根据服务端处理数据后返回来的值用来判断文件上传状况,才更符合用户需求和逻辑的

@chnanli
Copy link

chnanli commented Sep 12, 2015

请问,用ASP.NET接收webuploader上传的图片,结果保存的时候发生"GDI+ 一般性错误",使用ajaxFileUpload不会出现,这是什么原因导致的? 或者说后台服务端需要什么不一样的设置吗?

@lcoder
Copy link

lcoder commented Nov 22, 2015

403错误,uploadAccept回调没有执行,不知道怎么样可以捕获,做自定义的行为。

@cqgsm
Copy link

cqgsm commented Jan 12, 2016

请问 一个页面 有多个 按钮 队列 都不一样 这个 怎么实现啊 谢谢!

@yisense
Copy link

yisense commented Jan 19, 2016

@cqgsm 我使用的是angularjs指令进行上传组件封装。每个组件都有自己的单独作用域。很方便

@wfeng21
Copy link

wfeng21 commented Jan 21, 2016

我在页面里使用uploader.option出现了is a not function错误,不知道是什么原因,求解

代码如下 :
qq 20160121175439

@facingsea
Copy link

问题已解决,谢谢

@dotqi
Copy link

dotqi commented Mar 3, 2016

根据PHP改为.net
返回错误JSON //_result = "{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}";

如何获取自定义的错误代码100?

现在是用这种办法生成错误。
uploader.on('uploadAccept', function (file, response) {
var hasError = (response['error'] !== undefined);
if (hasError) {
// 通过return false来告诉组件,此文件上传有错。
return false;
};
});
可是源代码里
// 用来询问,是否返回的结果是有错误的。
requestAccept = function( reject ) {
var fn;

                ret = tr.getResponseAsJson() || {};
                ret._raw = tr.getResponse();
                fn = function( value ) {
                    reject = value;
                };

                // 服务端响应了,不代表成功了,询问是否响应正确。
                if ( !owner.trigger( 'uploadAccept', block, ret, fn ) ) {
                    reject = reject || 'server';
                }

                return reject;
            };

这一名,会把返回错误代码改为SERVER

@TclComupter
Copy link

您好,我安装上面写的 return false ,不会触发uploadError事件,是为什么?

@jackrebel
Copy link

@admin87 改成: reject = ret;//reject || 'server'; 就行了.
然后

 showError = function (code) {                
                switch( code ) {
                    case 'exceed_size':
                        text = '文件大小超出';
                        break;
                    case 'interrupt':
                        text = '上传暂停';
                        break;
                    default:
                        text = code.error.message ;//'上传失败,请重试';
                        break;
                }

刚用, 调试了下这样应该可以.

@TclComupter
Copy link

您好 ,按照上面的操作,我把源码里的对应地方改了
image
可是, return false 运行起来还是无法触发uploadError事件

@dotqi
Copy link

dotqi commented Mar 19, 2016

我的修改方法
1、服务器返回自定义JSON格式//{"version":"2.0","state":"success/error","errCode":"","errSource":"","errMessage":"","result":"","data":""}
源代码里ret就是上面返回的JSON
如果有错误state为error,result为自定义错误代码。
2、源代码修改
// 用来询问,是否返回的结果是有错误的。
requestAccept = function( reject ) {
var fn;

                ret = tr.getResponseAsJson() || {};
                ret._raw = tr.getResponse();
                fn = function( value ) {
                    reject = value;
                };

                // 服务端响应了,不代表成功了,询问是否响应正确。
                if ( !owner.trigger( 'uploadAccept', block, ret, fn ) ) {
                    //源代码
                    //reject = reject || 'server';
                    //为获取服务器返回错误代码更新源代码
                    //更新时间:2016-03-03 20:30
                    if (ret.state == "error") {
                        reject = ret.result || "server";
                    } else {
                        reject = reject || 'server';
                    }
                }

                return reject;
            };

3、获取
1、 //当文件上传出错时触发。
uploader.on('uploadError', function (file, reason) {
console.log(reason);
});
2、直接用DEMO里的UPLOAD.JS文件的代码,然后在addfile的showError 添加自定义错误代码
如: // 当有文件添加进来时执行,负责view的创建
function addFile(file) {
var $li = $('

  • ' +
    '

    ' + file.name + '

    ' +
    '

    ' +
    '

    ' +
    '
  • '),

                $btns = $('<div class="file-panel">' +
                    '<span class="cancel">删除</span>' +
                    '<span class="rotateRight">向右旋转</span>' +
                    '<span class="rotateLeft">向左旋转</span></div>').appendTo($li),
                $prgress = $li.find('p.progress span'),
                $wrap = $li.find('p.imgWrap'),
                $info = $('<p class="error"></p>'),
    
                showError = function (code) {
                    switch (code) {
                        case 'exceed_size':
                            text = '文件大小超出';
                            break;
    
                        case 'interrupt':
                            text = '上传暂停';
                            break;
    
                        case 'Error_FileExist':
                            text = '文件名已经存在';
                            break;
    
                        case 'Error_RelativePath':
                            text = '上传路径错误';
                            break;
    
                        default:
                            text = '上传失败,' + code;
                            break;
                    }
    
                    $info.text(text).appendTo($li);
                };
    

    @dotqi
    Copy link

    dotqi commented Mar 19, 2016

    关于UPLOADER的代码我建议直接用DEMO里的UPLOAD.JS文件的代码。非常好理解

    @TclComupter
    Copy link

    @admin87 我先试试
    谢谢帮助~

    @zhaoguibin
    Copy link

    如何提示server端返回的错误呢

    @csli
    Copy link

    csli commented Jun 28, 2016

    removeFile(fileId,true); 移除的文件, 在页面不刷新的情况下,再次被选择不会触发加入队列的事件, 请问这个需要怎么处理?

    @coolxiaoyi
    Copy link

    @csli
    可以试试var uploader = WebUploader.Uploader({duplicate:true}),增加参数duplicate:true。
    duplicate {Boolean} [可选] [默认值:undefined] 去重, 根据文件名字、文件大小和最后修改时间来生成hash Key.
    WebUploader默认不处理重复的文件。

    @codeditor2
    Copy link

    codeditor2 commented Oct 14, 2016

    @songlen
    Copy link

    songlen commented Dec 1, 2016

    uploader.on( 'uploadAccept', function( file, response ) { // alert(JSON.stringify(response)); if(response.code == 400) { file.setStatus('error',response.msg); //这样使用报错 return false; } });

    为什么在uploadAccept 里面设置错误信息不行呢,我想从这里接收报错信息,然后在uploadError里设置错误信息。。。

    @jellday
    Copy link

    jellday commented May 2, 2017

    <script type="text/javascript" src="http://libs.baidu.com/jquery/1.9.1/jquery.min.js"></script>
    <script type="text/javascript" src="uploader/webuploader.js"></script>
    <script type="text/javascript" src="uploader/upload.js"></script>
    <script type="text/javascript">
    $.extend( WebUploader.Uploader.options, {
        fileNumLimit: 10,
            fileSizeLimit: 30 * 1024 * 1024,    // 300 M
            fileSingleSizeLimit: 3 * 1024 * 1024    // 30 M
    

    });
    WebUploader.Mediator.on('uploadSuccess',function(file,response){
    alert("here");
    })
    </script>

    上传成功后并没有触发我设置的窗口。
    怎么样才能获取上传成功后的文件名?

    @RippleZhou
    Copy link

    你好,我苹果手机都能在微信自带浏览器上传照片,然后在iOs在safiri上传不了照片,安卓微信自带浏览器上传不了照片,其他浏览器可以上传照片。

    @wlgclrh
    Copy link

    wlgclrh commented Dec 28, 2017

    @2betop @sky20054122 , 大家好,在我使用webuploader的过程中遇到了一个问题:在上传一个附件的过程中,我设置线程数为5,在上传进度条快结束的一刹那点击暂停按钮,前台界面提示上传成功(出发了uploadSuccess方法), 但是实际上后台的分片并没有全部上传完成。 经过我们猜测是不是因为多线程的安全问题导致的,这个问题该怎么解决呢。 期待你们的回答。谢谢
    qq 20171228171314

    @LoneWarriorLYR
    Copy link

    大家好,在我使用webuploader的过程中遇到了一个问题:
    image
    Snipaste_2019-07-05_22-27-02

    没有执行事件uploadAccept,

    请问是什么问题?

    Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
    Projects
    None yet
    Development

    No branches or pull requests