Plupload使用flash方式上传文件时无法获取服务器返回的出错信息

Daven172 2015-11-01 09:43:38
plupload版本:2.1.8(当前最新) 官网:http://www.plupload.com/
服务端使用ASP.NET
操作系统:Windows 8.1
IDE:Visual Studio 2013
浏览器:Chrome 42.0.2311.90
Flash:18.0.0.209

完整代码:

<html>
<head>
<title>PluploadQueue</title>
<link href="js/jquery.ui.plupload/css/jquery.ui.plupload.css" rel="stylesheet" />
<link href="js/jquery.plupload.queue/css/jquery.plupload.queue.css" rel="stylesheet" />

<script type="text/javascript" src="js/jquery-1.10.1.js"></script>
<script type="text/javascript" src="js/plupload.full.min.js"></script>
<script type="text/javascript" src="js/jquery.plupload.queue/jquery.plupload.queue.min.js"></script>
<script type="text/javascript" src="js/i18n/zh_cn.js"></script>

<script type="text/javascript">
// Convert divs to queue widgets when the DOM is ready
$().ready(function () {
$("#uploader").pluploadQueue({
// General settings
runtimes: 'flash,html5,silverlight',
url: 'Upload.ashx',
max_file_size: '10mb',
chunk_size: '1mb',
unique_names: true,

// Resize images on clientside if we can
resize: { width: 320, height: 240, quality: 90 },

// Specify what files to browse for
filters: [
{ title: "Image files", extensions: "jpg,gif,png" },
{ title: "Zip files", extensions: "zip" }
],

init: {
PostInit: function () {
},

Error: function (up, err) {
console.log(err);
}
},

// Flash settings
flash_swf_url: 'js/Moxie.swf',

// Silverlight settings
silverlight_xap_url: 'js/Moxie.xap'
});

// Client side form validation
$('form').submit(function (e) {
var uploader = $('#uploader').pluploadQueue();

// Validate number of uploaded files
if (uploader.total.uploaded == 0) {
// Files in queue upload them first
if (uploader.files.length > 0) {
// When all files are uploaded submit form
uploader.bind('UploadProgress', function () {
if (uploader.total.uploaded == uploader.files.length)
$('form').submit();
});

uploader.start();
} else
alert('You must at least upload one file.');

e.preventDefault();
}
});
});
</script>
</head>

<body>
<form>
<div id="uploader">
<p>You browser doesn't have Flash, Silverlight, or HTML5 support.</p>
</div>
</form>
</body>
</html>

该代码来自于 http://www.oschina.net/p/plupload,略有修改。

现在的问题是:
我想从服务端返回出错信息,有两种方法
Upload.ashx代码如下:

public class Upload : IHttpHandler
{

public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
//方法A:抛异常
//throw new Exception("文件类型不符合!");

//方法B:将响应报文的StatusCode改为500,再输出错误信息
context.Response.StatusCode = 500;
context.Response.Write("文件类型不符合!");
}

public bool IsReusable
{
get
{
return false;
}
}
}


如果plupload采用html5方式上传:
(上面代码runtimes那一行改为:runtimes: 'html5,flash,silverlight',)

无论服务端使用方法A还是方法B,都能够获取到出错信息。
Error: function (up, err) {这个函数里面,输出结果为:
Object
code: -200
file: n
message: "HTTP 错误。"
response: "文件类型不符合!"(注意这里)
status: 500
__proto__: Object


可以看到,response获取到了完整出错信息。

如果plupload采用flash方式上传:
(上面代码runtimes那一行改为:runtimes: 'flash,html5,silverlight',)

无论服务端使用方法A还是方法B,都不能够获取到出错信息。
Error: function (up, err) {这个函数里面,输出结果为:
Object
code: -200
file: n
message: "HTTP 错误。"
response: null(注意这里)
responseHeaders: ""
status: 500
__proto__: Object


可以看到,response为null。

现在的问题是,因为客户端浏览器不一定支持html5,所以只能采用flash(silverlight暂不做考虑,html4已试过不可行)。

求flash方式的解决办法,怎样才能获取服务器返回的出错信息。
...全文
400 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lanfengniao 2019-01-31
  • 打赏
  • 举报
回复
Flash上传流程
即客户端flash上传时,会向上传的源站请求一个crossdomain.xml,flash通过crossdomain.xml的内容,判断本次上传是否符合规则。
更多详细内容请参考 OSS Web直传——使用Flash上传-云栖社区-阿里云.html
Go 旅城通票 2015-11-02
  • 打赏
  • 举报
回复
引用 4 楼 Daven172 的回复:
[quote=引用 3 楼 showbo 的回复:] [quote=引用 2 楼 Daven172 的回复:] [quote=引用 1 楼 slwsss 的回复:] context.Response.StatusCode = 500; 去掉 用输出的内容判断上传状态
去掉500的话,就没办法触发Error事件了,可以在FileUploaded事件中获取到出错信息, 但是界面上还是会显示上传成功的,这不符合我的要求啊 [/quote] 1#不是说了,通过判断错误信息来确定是否上传成功。FileUploaded里面判断返回的内容,你服务器没返回500状态当然没执行error[/quote] 到触发FileUploaded的时候,界面上已经显示上传成功了,难道要我去改这个组件的源代码?[/quote] 那个绿色箭头是flash里面的还是dom对象?如果是dom对象你可以再这个事件里面动态修改那个绿色图标为红色的xx什么的
Go 旅城通票 2015-11-01
  • 打赏
  • 举报
回复
引用 2 楼 Daven172 的回复:
[quote=引用 1 楼 slwsss 的回复:] context.Response.StatusCode = 500; 去掉 用输出的内容判断上传状态
去掉500的话,就没办法触发Error事件了,可以在FileUploaded事件中获取到出错信息, 但是界面上还是会显示上传成功的,这不符合我的要求啊 [/quote] 1#不是说了,通过判断错误信息来确定是否上传成功。FileUploaded里面判断返回的内容,你服务器没返回500状态当然没执行error
Daven172 2015-11-01
  • 打赏
  • 举报
回复
引用 1 楼 slwsss 的回复:
context.Response.StatusCode = 500; 去掉
用输出的内容判断上传状态

去掉500的话,就没办法触发Error事件了,可以在FileUploaded事件中获取到出错信息,
但是界面上还是会显示上传成功的,这不符合我的要求啊
slwsss 2015-11-01
  • 打赏
  • 举报
回复
context.Response.StatusCode = 500; 去掉 用输出的内容判断上传状态
Daven172 2015-11-01
  • 打赏
  • 举报
回复
引用 3 楼 showbo 的回复:
[quote=引用 2 楼 Daven172 的回复:] [quote=引用 1 楼 slwsss 的回复:] context.Response.StatusCode = 500; 去掉 用输出的内容判断上传状态
去掉500的话,就没办法触发Error事件了,可以在FileUploaded事件中获取到出错信息, 但是界面上还是会显示上传成功的,这不符合我的要求啊 [/quote] 1#不是说了,通过判断错误信息来确定是否上传成功。FileUploaded里面判断返回的内容,你服务器没返回500状态当然没执行error[/quote] 到触发FileUploaded的时候,界面上已经显示上传成功了,难道要我去改这个组件的源代码?

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧