Stream ended unexpectedly

由于有个微信平台的项目需求,就去看了一下微信公众平台的接口,发现微信平台上传下载附件需要使用ucrl命令,所以在LINUX上试了一下该命令:

curl -F @123.image http://.......

服务端接受附件代码是自己写的,反正都是form表单提交

后来查了一下资料,发现,用Java调用curl命令,还是挺麻烦的,不就上传个附件吗,还不如自己模拟客户端上传。接下来就写了一天模拟客户端上传的代码。

测试后发现,上传不 了,服务端报了:Processing of multipart/form-data request failed. Stream ended unexpectedly.

F,继续调试,改了几遍还是这样,google了一下,发现很多人是因为页面突然关闭,导致文件没有上传完,或文件太大,所以服务端就报了流意外的结束。我心想,我用的是代码,都是传输完才close的,不可能啊,而且文件才几K,我索性把close都注释掉测试,还是老样子。我怀疑是不是服务端代码问题,再写了个简单的上传页试了一下,可以啊,页面跟curl都没有问题,那服务端代码应该没问题了,继续关注模拟代码。我觉得应该是我们的报文哪里不对,所以读取的时候就报错了,看了下apach包的源码,有可能是由于流转换成报文的时候监测到报文不全所导致的,然后我用火狐调试查看了一下http请求信息和我们模拟的有什么不同,开始还真没看出什么问题,后台打印一下,才知道,原来少了两个换行符号。妈呀,真TM郁闷。

就是这里的结束边界前后少了\r\n.

时间: 2024-10-27 11:23:09

Stream ended unexpectedly的相关文章

上传文件出错:org.apache.commons.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. Stream ended unexpectedly

最近做一个web项目中有上传文件的功能,已经写出并在本地和部署到服务器上测试了好几个文件上传都没问题(我用的是tomcat).后来又上传了一个700多K的文件(前边的都是不足600K的,并且这个word文件用到了vb,比较复杂,可能造成读取较慢),在本地也是可以的,部署到服务器后在服务器上用服务器的本地浏览器上传也是可以的,但是部署到服务器上在其他地方通过浏览器访问上传却不行,情况是运行很久,然后出现“不能显示此页面”的字样.我就很奇怪,为什么同样的程序在本地和服务器上的效果却是不一样的?我看了

MAC 平台 QT编写iphone程序,“error loading iPhoneSimulatorRemoteClientRun ended unexpectedly”

本日这么多年一直做C++开发,最近要做QT项目,被QT做界面的新特性所吸引.QSS QML的确是亮点. 还有一个就是跨平台这方面,自己玩了玩. 用的QT 的开发包是在官网上下载 qt-opensource-mac-x64-android-ios-5.2.1.dmg 在使用Qt creator写一个hellworld 最后弹出 error loading  iPhoneSimulatorRemoteClientRun ended unexpectedly. 解决办法这里面 https://bugr

AsyncHttpClient 上传两个以上文件出错 急!

============问题描述============ AsyncHttpClient上传两个以上文件到服务端,服务端接收的时候报错 服务端是用Java的 struts2框架写的,tomcat服务器,tomcat设置如下: <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="100000" redirectPort="8443" URIEncodi

java http大文件上传,断点续传项目研究,Github上传源代码

1,项目调研 因为需要研究下断点上传的问题.找了很久终于找到一个比较好的项目. 在GoogleCode上面,代码弄下来超级不方便,还是配置hosts才好,把代码重新上传到了github上面. https://github.com/freewebsys/java-large-file-uploader-demo 效果: 上传中,显示进度,时间,百分比. 点击[Pause]暂停,点击[Resume]继续. 2,代码分析 原始项目: https://code.google.com/p/java-lar

JVM之编译OpenJDK

学习JVM时看到书里讲到自己编译OpenJDK.记录一下过程 Mac系统版本:High Sierra 10.13.6 源码版本:jdk8u-dev 一.准备源码 我是从官网下载网站的,openJDK源码是用mercurial进行管理的,所以首先使用homebrew安装mercurial brew install mercurial 安装完成之后,再运行命令克隆jdk源码,之后通过运行脚本get_source.sh获取所有的源代码 hg clone http://hg.openjdk.java.n

求超大文件上传方案( HTML5 )

1,项目调研 因为需要研究下断点上传的问题.找了很久终于找到一个比较好的项目. 在GoogleCode上面,代码弄下来超级不方便,还是配置hosts才好,把代码重新上传到了github上面. https://github.com/freewebsys/java-large-file-uploader-demo 效果: 上传中,显示进度,时间,百分比. 点击[Pause]暂停,点击[Resume]继续. 2,代码分析 原始项目: https://code.google.com/p/java-lar

SSISDB7:当前正在运行的Package及其Executable

PM问:"Vic,现在ETL Job跑到哪一个Package了,正在执行哪个Task?",第一次遇到这个问题时,一下就懵逼了,只能硬着头皮说:"我看看". 在做项目开发时,这个问题很常见,但是,被很多ETL开发工程师忽略了,可能是因为,这不是一个直接可以给出答案的命题. 在做大数据处理时,ETL Package开发工程师经常会用到管理者模式(Manager Mode)设计Package,也就是说,管理者Package调用子Package,通过优先约束控制子Packa

SSIS Catalog2:View Usage

Script1,查看错误发生时,某个Package执行Executable的属性和Executable的执行结果 select e.project_name, e.operation_type, --refer to [catalog].[operations] --e.package_name as FristExecutePackagename,e.object_type,e.object_id,e.status, et.package_name,et.package_path as Exe

SSISDB2:使用TSQL API 启动一个package

Package的每一次执行都是一个Execution Instance,都有一个唯一的ExecutionID:可以指定package执行时parameter的值. 1,使用 catalog.create_execution 存储过程创建一个Execution Instance Creates an instance of execution in the Integration Services catalog. Syntax create_execution [ @folder_name =