日期:2014-05-20  浏览次数:20792 次

关于http连接上传文件的问题
小弟在做J2ME程序上传文件时遇到一个稀奇的事情,客户端程序发送了二进制数据过去,但是服务器端接收文件最多就2016个字节,多了就压根收不到了。服务器端是ASP的,手机端的部分代码如下:
          核心代码是这样的
public   void   readFile(String   fileName)   {                                           //读文件
try   {
System.out.println(fileName);
InputStream   is   =   this.getClass().getResourceAsStream(fileName);             //找到文件,定义输入流
byte[]   data   =   new   byte[20480];                                                                               //开个字节数组,现在大小20K,服务器端肯定不会接到,改成2016以下,就能产生文件了
int   length   =   is.read(data,   0,   20480);                                                                 //计算流数据长度
upload(data,   length);                                                                                                 //调用upload
is.close();
}   catch   (Exception   e)   {
}
}
public   void   upload(byte[]   data,   int   length)   throws   IOException   {
String   url   =   "http://192.168.3.105/mobi/login/up/savetofile.asp ";                 //测试地址
try   {
sc   =   (HttpConnection)   Connector.open(url);                                                       //定义连接
sc.setRequestProperty( "Content-Type ",   "application/octet-stream ");       //设置http头
sc.setRequestProperty( "Content-Length ",   String.valueOf(length));
OutputStream   output   =   sc.openOutputStream();
output.write(data,   0,   length);                                                                               //写进输入流,这里没问题,如果前面开字节数组是20K,并且文件也有20K的数据,肯定能全发出去了。
output.close();
}   catch   (IOException   e)   {
//   TODO   自动生成   catch   块
throw   e;
}
}
上面客户端程序都正常运行,无异常错误。
当我将字节数组定义大于2016的时候,服务器压根就接收不到数据,如果定义成等于或小于2016字节数的时候,服务器端能收到一个等于或小于2016字节的文件。
举例说明:假如我上传文件2200字节,开数组2200,那么服务器压根没反应,但查看手机流量,确实发出去2200个字节。而如果我将字节数组开到等于2016,那么服务器端就能接收到一个大小为2016的文件,原来2200字节的数据,到2016的地方就停止接收了。
总之服务器端最多只接收2016个字节的数据,百思不得其解。请问,大家遇到过这样的问题吗?
请不吝赐教!
小弟谢谢各位了!

------解决方案--------------------
对,就是这个意思,其实这样做是比较合理的方法,假设有个2M的大文件,一下载进来内存不暴才怪
------解决方案--------------------
应该是你的发送方式有问题