`
小杨学JAVA
  • 浏览: 901492 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java swfupload Error #2038

 
阅读更多

转:http://www.zwsun.com/swfupload_tips_2012_03_04_post

 

 

 

 

 

 

很早以前记的,放在草稿箱里,没有发出来,现发出来,因为是笔记,所以看起来可能比较乱。

swfupload是上传大文件、显示上传进度以及一次上传多个文件的很好选择。但由于其采用了flash做为上传的客户端,带来了以下问题:

  • cookie无法和浏览器共享:如果你限制用户登录了后才能上传,那么,用户在浏览器里的cookie你要通过post的形式传过去。
  • 跨域问题:若swfupload所用的swf文件和上传处理段不在同一域名,便有此跨域问题,解决倒也简单,在上传处理端加个crossdomain.xml即可。

crossdomain.xml示例:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
    <site-control permitted-cross-domain-policies="all"/>
    <allow-access-from domain="*.swfuploadfile.com" />
    <allow-http-request-headers-from domain="*" headers="*" />
</cross-domain-policy>

更让人头疼的是报2038错误(error=-200 message=#2038),这个错误实在折腾人啊。

先看看adobe官网是怎么说的:

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/FileReference.html?filter_flash=cs5&filter_flashplayer=10.2&filter_air=2.6
里面讲到了ioerror出现的可能

  • An input/output error occurs while the player is reading, writing, or transmitting the file.
  • The SWF file tries to upload a file to a server that requires authentication (such as a user name and password). During upload, Flash Player or Adobe AIR does not provide a means for users to enter passwords. If a SWF file tries to upload a file to a server that requires authentication, the upload fails.
  • The SWF file tries to download a file from a server that requires authentication, within the stand-alone or external player. During download, the stand-alone and external players do not provide a means for users to enter passwords. If a SWF file in these players tries to download a file from a server that requires authentication, the download fails. File download can succeed only in the ActiveX control, browser plug-in players, and the Adobe AIR runtime.
  • The value passed to the url parameter in the upload() method contains an invalid protocol. Valid protocols are HTTP and HTTPS.

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/runtimeErrors.html

  • 2038 File I/O Error.This error occurs when an application can’t get file size, creation date or modification data using the FileReference API.

大概意思就是没有办法获得文件信息,另外一方面是由于上传接口需要http验证,无法输入用户名和密码无法所致。

那么先检查一下上传接口是否有上述问题(使用最原始的上传方式检查),如果上传接口正常,那么需要想想是不是客户端的问题了。有用户说杀毒软件会禁止flash上传,这个我没有实际的验证,但的确遇到过在同一swfupload系统,在有些客户端报2038错,而在其他的地方正常。

若所有的客户端都出现此问题,那么还是有可能上传接口的问题,我就碰到一例:

情况如下:

  • 上传接口前面有一nginx做转发,且这个nginx距离实际处理上传文件的app服务器还有一段距离。
  • 上传小文件正常,上传大文件会报2038 io error。
  • 若不使用nginx转发,flash直接往app服务器上传文件,大文件也正常上传。

去检查nginx的log

cat nginx.log  | grep Flash | awk ‘$12 == 413 {print $0}’

发现nginx的响应状态是499,而非正常的200。

怀疑nginx转发有问题,在客户端上传的同时,在nginx服务器上抓包看看:

sudo tcpdump  -vvv -n -A host upload-app and port 80

发现nginx转发的request的post数据不全,同时upload-app服务器上给出的响应是 400 bad request。

至此,初步将原因定为flash player主动断开连接,因为本地的nginx log里面是499,关于499,http协议rfc2616中没有定义,通过相关资料查询可得,499为客户端(flash player)主动断开连接。关于nginx的499可以参考以下文章:

  • http://forum.nginx.org/read.php?2,213789,213789
  • http://www.ruby-forum.com/topic/137312

为什么flash会主动断开连接?我也不知。

 

2014年11月2日, PM 11:19:13更新

可能原因

1:服务器返回的数据大小超过某个数字限制,

 

分享到:
评论

相关推荐

    java swfupload 多文件上传js

    SWFUpload控件使用 简介 SWFUpload是一个客户端文件上传工具,主要特点是: ...uploadError(file, errorCode, message) fileDialogStart() 等等 这些事件开发人员都可以根据自己的需要进行修改,使用起来非常方便。

    swfupload实例]SWFUpload_java实例.doc

    ### SWFUpload与Java实例详解 #### SWFUpload概述 SWFUpload是一个强大的Flash和JavaScript组件,用于实现浏览器上的多文件无刷新上传功能。通过利用Flash技术,它能够跨浏览器和平台提供一致的用户体验,同时提供...

    java 版 swfupload

    在Java环境下,SWFUpload可以与后端服务器进行交互,实现文件上传到Java应用的功能。 **1. SWFUpload 功能特性** - **多文件选择**:用户可以选择多个文件进行上传,无需多次点击。 - **文件预览**:支持在上传前...

    SWFUpload_java实例

    例如,`fileQueued`处理文件加入队列的事件,`uploadStart`处理开始上传的事件,`uploadProgress`则跟踪上传进度,`uploadError`处理上传错误等。 在服务器端,使用Struts1.x处理文件上传,你需要创建一个Action来...

    两种不同jar 包的 SwfUpload

    在Java Web开发中,SwfUpload可以与JSP结合使用,提供用户友好的多文件上传体验。本示例将探讨如何在JSP页面中集成SwfUpload,并实现多图片上传的功能。 一、SwfUpload简介 SwfUpload是一款基于Flash的文件上传插件...

    SWFUPLOAD使用实例 (JSP)

    在JSP中,你可以使用`&lt;input type="file" name="Filedata"&gt;`这样的隐藏表单元素来接收SWFUpload上传的文件,然后使用Java的`Part`接口处理文件上传。 在`multiuploaddemo`这个压缩包文件中,很可能包含了完整的...

    swfupload 的文件上传程序 java 上传方式 !

    本文将深入探讨SwfUpload的使用方法、核心概念以及如何在Java环境中集成和实现文件上传。 1. **SwfUpload 基本概念** - **Flash Movie**: SwfUpload是基于Flash的一个SWF文件,负责前端的文件选择和上传控制。 - ...

    jsp 的swfupload上传例子 v2.1版本

    在JSP(JavaServer Pages)环境中集成SwfUpload,可以极大地增强网站的交互性和用户体验。 **1. SwfUpload 功能特性** - **多文件选择**:SwfUpload 支持用户一次性选择多个文件进行上传,减少了用户操作的步骤。 ...

    SWFUpload v2.2.0 中文汉化版

    3. **API与事件**:SWFUpload提供了丰富的JavaScript API接口和事件,如`uploadStart`、`uploadSuccess`、`uploadError`等,允许开发者根据需要对上传过程进行精确控制和自定义处理。 4. **中文汉化**:v2.2.0版本...

    swfupload上传多文件

    - **JavaScript 配置**:注册SWFUpload实例,绑定事件监听器,如`fileQueued`、`fileUploadProgress`、`fileSuccess`和`fileError`。 - **Flash与JavaScript通信**:SWFUpload通过ExternalInterface与JavaScript...

    SWFUpload跨域上传

    在Java环境中,如果使用Struts2框架,你可能需要在Action类或Filter中添加对应的CORS配置。 总的来说,SWFUpload跨域上传涉及到前端JavaScript和后端服务器的协作,前端负责与用户的交互和文件上传的控制,后端则...

    使用SWFUpload上传文件

    标签中提到了Java,这意味着SWFUpload通常会与Java服务器端配合工作。在Java环境中,你可以使用诸如Spring MVC或Struts2这样的框架处理文件上传请求,接收文件并进行存储、验证或处理。 总的来说,SWFUpload 是一...

    SWFUpload 2.5.0 Alpha

    SWFUpload与服务器端通信通常使用POST方式,可以方便地集成到各种服务器端语言环境,如PHP、ASP.NET、Java等,通过设置服务器端的接收接口,实现文件的保存和处理。 11. **API和文档**: SWFUpload 提供详细的API...

    swfupload的使用实例

    function fileQueueError(file, errorCode, message) { // 错误处理代码 } function uploadSuccess(file, serverData, responseReceivedTime) { // 上传成功处理代码 } swfu.startUpload(); ``` 5. **自定义UI*...

    SWFUpload 批量上传 图片

    7. **服务器端支持**:SWFUpload 支持多种服务器端语言,如PHP、ASP.NET、Java等,方便集成到现有的后台系统中。 使用SWFUpload 需要一定的技术背景,开发者需要了解JavaScript、Flash以及与服务器端的通信机制。...

    swfupload demo struts

    return ERROR; } } // getters and setters... } ``` 以上就是关于SWFUpload与Struts整合实现文件上传的详细解析。通过这种方式,你可以为用户提供更加直观、便捷的文件上传体验,同时利用Struts的强大功能...

    四、struts2+swfUpload例子二

    SwfUpload提供了丰富的事件回调,如onProgress、onSuccess和onError,可以利用这些事件来更新用户界面,展示上传进度、结果或者错误信息。例如,你可以用JavaScript更新一个进度条元素,显示当前文件的上传进度。 ...

    Struts2+SWFUpload上传文件并显示进度条

    5. **设置回调函数**:SWFUpload提供了多种事件,如`fileQueued`、`uploadProgress`、`fileSuccess`和`fileError`等,你需要根据这些事件来更新UI状态。例如,`uploadProgress`事件可以用来更新进度条的进度。 6. *...

    Java servlet 和 swf上传超大文件源码

    Java Servlet和SWFUpload是两种不同的技术,但它们在处理大文件上传方面有着共同的应用。在Web开发中,用户可能需要上传大文件,如视频、音频或大型文档,这就需要服务器端具有处理大文件上传的能力。Java Servlet是...

    java动态上传excle文件并导出数据.pdf

    Java 动态上传 Excel 文件并导出数据是一个常见的需求,特别是在数据分析、报表处理或系统集成等场景中。在 Java 开发中,我们可以利用各种库来实现这个功能,这里提到的技术涉及到了前端的文件上传和后端的数据处理...

Global site tag (gtag.js) - Google Analytics