`
huangjun_mail
  • 浏览: 118850 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

浏览器upload文件到Web服务器

    博客分类:
  • Java
阅读更多

     前段时间写了一个IC卡读写COM组件,这个组件可以把数据以文件的方式读写到IC卡里;但是由于有时服务器端是WebServer,需要把文件download/upload到WebServer.
     在这个过程中由于读完IC卡文件后,需要立即upload到服务器,所以不能用标准的<input type="file">html标签去传送文件,后来用了公司另外一个Team的组件,可以实现多线程,分片上传,但是由于此组件封装太死,在我们Team的开发平台下运行,界面展现有问题;百般无奈中,只能自己寻找方法:

     1.通过XMLHTTP传输

   <script type="text/javascript">
    function doFileUpLoad()
    {
     var strFilePath = "c:\\0000000005.txt";
     var xmlstream = new ActiveXObject("ADODB.Stream");
   xmlstream.Mode = 3; //read write
   xmlstream.Open();
   xmlstream.Type = 1; // adTypeBinary
   xmlstream.LoadFromFile(strFilePath);
     var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
     xmlhttp.Open("POST","http://127.0.0.1:8088/SomePost",false);
   xmlhttp.setRequestHeader("Content-Length",xmlstream.Size); //set the length of the content
     xmlhttp.send(xmlstream.Read(xmlstream.Size)); //Send the stream
     //alert(xmlhttp.responseText);
     var text = BytesToBstr(xmlhttp.responseBody,"GBK");
     document.getElementsByName("data")[0].value = text;//xmlhttp.responseText;
    }


    function  BytesToBstr(body,Cset)
    {
   var objstream = new ActiveXObject("ADODB.Stream");
   objstream.Type = 1;
   objstream.Mode = 3 ;
   objstream.Open();
   objstream.Write=body;
   objstream.Position=0;
   objstream.Type=2;
   objstream.Charset=Cset;
   var result = objstream.ReadText();  
   objstream.Close();
   return result;
  }
 </script>

  传输过去的文件内容,放在“空行”数据下面(POST发送的HTTP协议数据,最后一个HTTP Header下面是空行,空行下面是Header以外的数据),可以通过服务器端去处理文件内容,至于文件名称,可以直接写在自定义HTTP Header里,或写入文件内容最前面(当然文件大小、文件内容Hash值等都可以写入进去);最后由服务器端程序(如Servlet)把数据流写入文件。

    2.直接把文件内容存在标签value中。
       function doReadFileToBuff(filename)
        {
                 var ForReading = 1, ForWriting = 2, ForAppending = 8;
                 // The following line contains constants for the OpenTextFile
                 // format argument, which is not used in the code below.
                var TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0;
                var fso = new ActiveXObject("Scripting.FileSystemObject");
               // Open the file for output.
               var f = fso.OpenTextFile(filename, ForReading, true,TristateUseDefault);
               var value = "";
               if (!f.AtEndOfStream)
                  value = f.ReadAll();
               f.Close();
              document.getElementById("form:filecontent").value = value;
        }

       这种方式其实最简单,不用专门去解析HTTP协议,不过FileSystemObject Activex只能处理文本文件,对于处理二进制文件,会丢掉一些文件内容;如果处理二进制文件,可以使用第一种方式。

具体FileSystemObject 可以参考MSDN:http://msdn.microsoft.com/en-us/library/z9ty6h50(VS.85).aspx

分享到:
评论

相关推荐

    C++Http上传文件到web服务器,解决中文参数乱码

    在C++中,进行HTTP文件上传到Web服务器时,可能会遇到中文参数乱码的问题。这是因为HTTP协议本身并不处理字符编码,而是依赖于上层的应用层协议(如HTTP头或者POST数据)来处理字符集。当涉及到非ASCII字符,如中文...

    WEBUPLOAD大文件传送C# asp.net

    1. 浏览器限制:大多数浏览器对单个文件上传的大小有限制,通常为2MB到10MB。 2. 性能问题:大文件上传可能导致服务器负载增加,处理时间过长。 3. 用户体验:如果文件上传中断,用户可能需要重新开始整个过程。 三...

    webupload上传与下载文件.rar

    为了优化用户体验,WebUpload支持流式下载,即边接收数据边写入到浏览器的下载缓存,避免一次性加载整个文件导致的内存压力。 关于标签"文件上传",这表明了该插件的主要功能。在Web应用中,文件上传常常涉及到表单...

    web页面多选上传文件的实现(浏览器-打开文件-可选多个文件来上传).源代码

    在Web开发中,用户往往需要上传文件到服务器,如图片、文档等。传统的文件上传方式通常只允许用户选择一个文件,但随着技术的发展,现在我们可以实现多选文件上传功能,让用户能够一次性上传多个文件,极大地提高了...

    webUpload实例,可直接运行

    这个实例是已经配置好并可以直接运行的,通过解压后打开`test.html`文件,你将能够体验到WebUpload的实际效果。 WebUpload的核心特性包括: 1. **多文件选择**:用户可以一次选择多个文件进行上传,提高了上传效率...

    stm32搭建web服务器,修改于官方移植lwip搭建的web服务器 硬件基础:stm32f407 + lan9303+源代码+

    stm32搭建web服务器,修改于官方移植lwip搭建的web服务器 硬件基础:stm32f407 + lan9303(代码+文档 ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合...

    在单片机上实现http upload 小文件上传

    HTTP(超文本传输协议)是互联网上应用最为广泛的一种网络协议,主要用于从Web服务器传输超文本到本地浏览器。HTTP Upload则是指通过HTTP协议将文件数据发送到服务器的过程,通常采用POST请求方式。POST请求允许...

    webupload上传与下载文件,web实现文件上传下载,Java源码.zip

    5. 上传文件:WebUpload通过Ajax将文件分块发送到服务器。 6. 服务器接收:后端Java程序接收文件流,保存到指定位置。 三、Java后端处理文件上传 1. 创建MultipartResolver:Spring MVC框架中,我们需要配置一个...

    webUpload.zip_webupload api_webupload.js_webuploadcomponent_webu

    是一个包含Web上传功能相关组件和API的压缩包,它主要涉及了"webupload API"、"webupload.js"、"webuploadcomponent"以及"webupload官网"的相关内容,这通常指的是WebUploader,一个强大的前端文件上传组件。...

    从本机向Web服务器上传文件 小例子,C++.net源代码编写

    在IT行业中,网络通信是不可或缺的一部分,而从本地计算机向Web服务器上传文件是常见的操作,例如在云存储、文件分享或在线编辑等场景下。本文将深入探讨如何使用C++.NET来实现这一功能,主要围绕标题和描述中的知识...

    实现浏览器超大文件,分片断点,续传

    - **Web Workers**:可选,用于在后台线程处理文件分片,提高用户体验。 在给定的`upload_demo`压缩包中,可能包含了实现以上功能的示例代码,包括前端的JavaScript代码、后端的处理逻辑,以及可能的配置文件和测试...

    通过浏览器向Linux服务器上传文件(由http通过CGI处理)的c程序

    在IT行业中,将文件从浏览器上传到Linux服务器是一项常见的任务,尤其在开发Web应用程序时。本文将详细讲解如何通过HTML创建一个文件上传界面,并利用C语言编写CGI(Common Gateway Interface)程序,让Linux服务器...

    AjaxUpload.rar 文件上传

    综上所述,AjaxUpload是现代Web应用中实现高效、流畅文件上传的一种重要技术,结合JavaScript和Ajax,它能提供更好的用户体验。不过,随着技术的发展,HTML5的File API和Fetch API等新特性也在逐步替代传统的Ajax...

    webupload demo webuploader实例

    这个"webupload demo webuploader实例"的压缩包很可能是为了展示如何在实际项目中使用WebUploader进行文件上传操作。下面,我们将深入探讨WebUploader的核心功能、工作原理以及如何通过示例来实现文件上传。 1. ...

    webupload附件上传

    然而,为了照顾到不支持这些新特性的老版本浏览器,WebUpload也提供了Flash作为备选方案,确保了良好的跨平台和跨浏览器兼容性。 在实际使用WebUpload时,开发者需要了解其基本配置和API。例如,设置服务器端的接收...

    webupload多文件上传,包含预览.rar

    其次,WebUpload通过FormData对象将文件数据包装,然后利用XMLHttpRequest或者fetch API发送POST请求到服务器,实现文件的上传。这种方式能够很好地处理大文件上传,因为它支持分块上传和断点续传,确保了上传的稳定...

    从浏览器示例上载文件到backblaze-b2-:此示例演示了使用AJAX从Web浏览器中调用b2_upload_file Backblaze B2 Cloud Storage API

    此示例演示了如何通过Web浏览器使用“ b2_upload_file” Backblaze B2 Cloud Storage API将文件直接从Web浏览器上传到B2存储桶,而文件内容不必通过您控制的中间Web服务器。 这类似于对其他云存储提供商使用技术,...

    android通过http上传文件到服务器

    在提供的压缩包文件中,`upload_file_service`可能包含了服务器端的Servlet代码,而`upload_file_android`可能包含Android客户端的文件上传实现。分析这些文件,你可以看到具体的实现细节,如参数设置、异常处理等。...

    web服务器控件及其应用实验

    通过这个实验,学生不仅能熟悉C#语言的基础,还能掌握如何在ASP.NET环境中使用Web服务器控件进行交互式Web应用开发,尤其是文件上传这一常见功能的实现。这样的实践经验有助于提升学生的实际编程技能和问题解决能力...

    jspupload文件上传

    在Web开发中,文件上传是一项常见的功能,用户可能需要上传图片、文档等数据到服务器。在Java Web环境中,我们通常使用JSP(JavaServer Pages)来实现这一功能。"jspupload"就是这样一个专门用于处理JSP文件上传的...

Global site tag (gtag.js) - Google Analytics