CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  Web 开发

用SmartUpload上传文件到服务器,IE到底传了什么啊!假如我有用一个application,该怎么做呢?

楼主FDH007(麻木的下一步就是堕落)2003-12-01 17:54:37 在 Java / Web 开发 提问

用SmartUpload上传文件到服务器,IE到底传了什么啊!假如我现在没有界面,用一个application做SmartUpload的客户端,该怎么做呢? 问题点数:0、回复次数:10Top

1 楼kjah(黑丁)回复于 2003-12-01 18:05:09 得分 0

applications   传文件应该是socket编程Top

2 楼FDH007(麻木的下一步就是堕落)回复于 2003-12-01 18:18:04 得分 0

不行啊1我现在只能用HTTP上传,我的想法是去设置request的Header中的  
  content-type   =   multipart/form-data;   boundary=---------------------------7d32c227  
  3202ce和  
  dataHeader::Content-Disposition:   form-data;   name="FILE4";   filename="C:\Documents  
    and   Settings\fangdh\桌面\request.bak"  
  不过好象不行的。  
  看RFC1867后还是不是很明白的,不知道那个流到底是怎么处理。谢谢帮助!!!Top

3 楼tijichen(笑起来像狗)回复于 2003-12-02 11:57:07 得分 0

http://www.java-cn.com/bbs-jsp/show.jsp?id=4942&forum=net  
  我在JAVA中文站发表的文章,主要是分析了HTTP文件上传的格式和内容,希望对你有帮助Top

4 楼FDH007(麻木的下一步就是堕落)回复于 2003-12-03 09:55:06 得分 0

谢谢tijichen(chenzhi)   的热心帮助,那个什么RFC1867,引入了一个input   file,IE读文件流给jsp,多个文件间用两个ch(13),还有什么头的,  
  我只有自己写代码去读文件了。  
   
   
  好象进不去的Top

5 楼dugang106(冷风细雨)回复于 2003-12-03 10:05:52 得分 0

不知道你用的工具能否设置断点调试,如果你调试一下的话,就很清楚了Top

6 楼tijichen(笑起来像狗)回复于 2003-12-03 12:53:47 得分 0

我把文章贴出来吧  
  以下格式适合于FORM的ENCTYPE为multipart/form-data"的情况    
  其实在一个项目中,文件上传是很重要的一环,我们经常会用到网上下栽的现成的上传包,其实有时用在项目中感觉很别扭。如果自己编写一个,肯定会更符合项目的实际情况,比如在里面加上权限控制、文件按类型自动分开存放等等,其实只要搞清了HTTP的格式,编写这样的程序是不难的    
  下面是一个我测试用的例子,我把HTTP的内容打印了出来,如下:    
  -----------------------------7d333a81402d8    
  Content-Disposition:   form-data;   name="jitfile";   filename="F:\库存补充21230.txt"    
  Content-Type:   text/plain    
   
  领料/退料单的来源单据加上服务单。    
  -----------------------------7d333a81402d8    
  Content-Disposition:   form-data;   name="mrpfile";   filename=""    
  Content-Type:   application/octet-stream    
   
   
  -----------------------------7d333a81402d8--    
  再分析一下:    
  分隔符   //这个是随机的,每次都不一样    
  13   10   //这两个字符分割符拉,程序中通过判断这两个符号来决定读取到了那一部分    
  Content-Disposition:;name-"";filename="";//这些偶就不想说了    
  13   10    
  Content-Type:text/plain    
  13   10    
  13   10    
  文件内容    
  13   10    
  分隔符    
  45   45   13   10//这四个字符一起出现就表示了HTTP内容的结束    
  还有个注意的地方,就是在最开始从REQUEST中读取内容到数组的时候    
  是不能一次性读取完了,应该设个循环,其他地方小心点就是了Top

7 楼leshui(大象无形)(有物混成,先天地生)回复于 2003-12-03 13:02:33 得分 0

传的是字节流Top

8 楼cbhyk()回复于 2003-12-03 14:24:35 得分 0

http://expert.csdn.net/Expert/topic/2300/2300333.xml?temp=.8086969Top

9 楼cbhyk()回复于 2003-12-03 14:26:14 得分 0

http://expert.csdn.net/Expert/topic/2238/2238658.xml?temp=1.171291E-03  
   
  import   java.io.File;  
  import   java.io.FileInputStream;  
  import   java.io.IOException;  
  import   java.io.OutputStream;  
  import   java.net.InetAddress;  
  import   java.net.Socket;  
   
  public   class   SimulateUpload  
  {  
          private   static   final   byte[]   BOUNDARY   =   "---------------------------7d33bc1b47038c".getBytes();  
          private   static   final   byte[]   CRLF   =   "\r\n".getBytes();  
   
          public   void   simUpload(String   page,   String[]   paramNames,   Object[]   paramValues,   OutputStream   os)   throws   IOException  
          {  
                  int   contentLength   =   calculateLength(paramNames,   paramValues);  
   
                  os.write(("POST   "   +   page   +   "   HTTP/1.1").getBytes());  
                  os.write(CRLF);  
   
                  os.write("User-Agent:   myselfHttp/1.0".getBytes());  
                  os.write(CRLF);  
   
                  os.write("Accept:   */*".getBytes());  
                  os.write(CRLF);  
   
                  os.write("Host:   ".getBytes());  
                  os.write(InetAddress.getLocalHost().getHostAddress().getBytes());  
                  os.write(CRLF);  
   
                  os.write("Content-Type:   multipart/form-data;   boundary=".getBytes());  
                  os.write(BOUNDARY);  
                  os.write(CRLF);  
   
                  os.write(("Content-Length:   "   +   contentLength).getBytes());  
                  os.write(CRLF);  
   
                  os.write(CRLF);  
   
                  os.write(BOUNDARY);  
                  os.write(CRLF);  
                  for(int   i=0;   i<paramNames.length;   i++)  
                  {  
                          if(paramValues[i]   instanceof   String)  
                                  writeParameter(os,   paramNames[i],   (String)   paramValues[i]);  
                          else   if(paramValues[i]   instanceof   File)  
                                  writeFile(os,   paramNames[i],   (File)   paramValues[i]);  
                  }  
                  os.flush();  
          }  
   
          private   void   writeFile(OutputStream   os,   String   paramName,   File   file)   throws   IOException  
          {  
                  os.write("Content-Disposition:   form-data;   name=\"".getBytes());  
                  os.write(paramName.getBytes());  
                  os.write("\";   filename=\"".getBytes());  
                  os.write(file.getAbsolutePath().getBytes());  
                  os.write("\"\r\nContent-Type:   application/octet-stream".getBytes());  
                  os.write(CRLF);  
                  os.write(CRLF);  
   
                  FileInputStream   fis   =   new   FileInputStream(file);  
                  byte[]   buf   =   new   byte[4096];  
                  int   bytes   =   0;  
                  while((bytes   =   fis.read(buf))   !=   -1)  
                          os.write(buf,   0,   bytes);  
                  fis.close();  
   
                  os.write(CRLF);  
                  os.write(BOUNDARY);  
                  os.write(CRLF);  
          }  
   
          private   void   writeParameter(OutputStream   os,   String   name,   String   value)   throws   IOException  
          {  
                  os.write("Content-Disposition:   form-data;   name=\"".getBytes());  
                  os.write(name.getBytes());  
                  os.write('"');  
                  os.write(CRLF);  
                  os.write(CRLF);  
                  os.write(value.getBytes());  
                  os.write(CRLF);  
                  os.write(BOUNDARY);  
                  os.write(CRLF);  
          }  
   
          private   int   calculateLength(String[]   paramNames,   Object[]   paramValues)  
          {  
                  int   result   =   BOUNDARY.length   +   CRLF.length;  
                  for(int   i=0;   i<paramNames.length;   i++)  
                  {  
                          if(paramValues[i]   instanceof   String)  
                                  result   +=   88   +   paramNames[i].getBytes().length   +   ((String)paramValues[i]).getBytes().length;  
                          else   if(paramValues[i]   instanceof   File)  
                          {  
                                  File   file   =   (File)   paramValues[i];  
                                  result   +=   141   +   paramNames[i].getBytes().length   +   file.getAbsolutePath().getBytes().length   +   file.length();  
                          }  
                  }  
                  return   result;  
          }  
   
          public   static   void   main(String[]   args)  
          {  
                  try  
                  {  
                          Socket   socket   =   new   Socket("localhost",   80);  
                          OutputStream   os   =   socket.getOutputStream();  
                          SimulateUpload   sim   =   new   SimulateUpload();  
                          String[]   paramNames   =   new   String[]{"param1",   "param2",   "param3",   "file",   "file2"};  
                          Object[]   paramValues   =   new   Object[]{"value1",   "value2",   "value3",   new   File("d:\\test.txt"),   new   File("d:\\test1.txt")};  
                          sim.simUpload("/uploadServlet",   paramNames,   paramValues,   os);  
                          os.flush();  
                          os.close();  
                          socket.close();  
                  }  
                  catch(Exception   e)  
                  {  
                          e.printStackTrace();  
                  }  
          }  
  }  
   
  Top

10 楼FDH007(麻木的下一步就是堕落)回复于 2003-12-09 14:57:37 得分 0

谢谢大家的热心帮助!Top

相关问题

  • 修改ie的代理服务器
  • IE访问某个WEB服务器,那么服务器端获取了我哪些信息呢。
  • 如何enable/disable IE中"使用代理服务器"选项
  • 请问一下用CAsyncSocket可以写IE代理服务器吗?
  • 关于IE、代理服务器,在线送分
  • 服务器端测试客户端 IE 的语言版本﹖
  • win2003+sp1服务器中ie浏览问题
  • 如何将IE收藏夹直接导出到服务器上?
  • 服务器能不能主动通知IE刷新?
  • 动态改变IE代理服务器地址

关键词

  • .net
  • 文件
  • ie
  • 项目
  • application
  • jsp
  • a81402d8
  • smartupload
  • 格式
  • disposition

得分解答快速导航

  • 帖主:FDH007

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo