zoukankan      html  css  js  c++  java
  • WCF+上传+大文件处理

    大文件处理的方式拆分读取,此文只为记录文件处理方式,供日后查阅。

    源码来自http://blog.csdn.net/lywust/article/details/7009248

    经过改编将源码改编为文件上传的功能如下(处理几个GB的文件应该是没有问题的)

    客户端

     1 public partial class WebForm1 : System.Web.UI.Page
     2     {
     3         protected void Page_Load(object sender, EventArgs e)
     4         {
     5 
     6         }
     7 
     8         protected void Button1_Click(object sender, EventArgs e)
     9         {
    10             BigFileRead(@"E:工具开发工具数据库SqlServer2008 r2cn_sql_server_2008_r2_enterprise_x86_x64_ia64_dvd_522233.iso");
    11             Response.Write("文件传输成功!");
    12         }
    13 
    14         private void BigFileRead(string strFilePath)
    15         {
    16             UploadService c = new UploadService();
    17             //每次读取的字节数
    18             int iBufferSize = 1024000;
    19             byte[] buffer = new byte[iBufferSize];
    20             FileStream fs = null;
    21             try
    22             {
    23                 fs = new FileStream(strFilePath, FileMode.Open);
    24                 //文件流的长度
    25                 long lFileSize = fs.Length;
    26                 //文件需要读取次数
    27                 int iTotalCount = (int)Math.Ceiling((double)(lFileSize / iBufferSize));
    28                 //当前读取次数
    29                 int iTempCount = 0;
    30 
    31                 while (iTempCount < iTotalCount)
    32                 {
    33                     //每次从最后读到的位置读取下一个[iBufferSize]的字节数
    34                     fs.Read(buffer, 0, iBufferSize);
    35                     ////将字节转换成字符
    36                     //string strRead = Encoding.Default.GetString(buffer);
    37                     ////此处加入你的处理逻辑
    38                     //Console.Write(strRead);
    39                     c.UploadFile("aaa.iso",buffer);
    40                     iTempCount++;
    41                 }
    42 
    43             }
    44             catch (Exception ex)
    45             {
    46                 //异常处理
    47             }
    48             finally
    49             {
    50                 if (fs != null)
    51                 {
    52                     fs.Dispose();
    53                 }
    54             }
    55         }
    56     }
     1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WcfService1.WebForm1" %>
     2 
     3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     4 
     5 <html xmlns="http://www.w3.org/1999/xhtml">
     6 <head runat="server">
     7     <title></title>
     8 </head>
     9 <body>
    10     <form id="form1" runat="server">
    11     <div>
    12     
    13         <asp:FileUpload ID="FileUpload1" runat="server" />
    14         <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="上传" />
    15     
    16     </div>
    17     </form>
    18 </body>
    19 </html>

    配置文件(因在一个工程下所以包含服务端和客户端配置文件)

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <configuration>
     3 
     4   <system.web>
     5     <compilation debug="true" targetFramework="4.0" />
     6       <httpRuntime   maxRequestLength="409600000" />
     7   </system.web>
     8     <system.serviceModel>
     9         <bindings>
    10             <basicHttpBinding>
    11                 <binding name="BasicHttpBinding_IUploadService" closeTimeout="00:01:00"
    12                     openTimeout="00:01:00" receiveTimeout="01:10:00" sendTimeout="01:10:00"
    13                     allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
    14                     maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
    15                     transferMode="Streamed"
    16                     useDefaultWebProxy="true">
    17                     <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
    18                         maxBytesPerRead="4096" maxNameTableCharCount="16384" />
    19                     <security mode="None">
    20                         <transport clientCredentialType="None" proxyCredentialType="None"
    21                             realm="" />
    22                         <message clientCredentialType="UserName" algorithmSuite="Default" />
    23                     </security>
    24                 </binding>
    25             </basicHttpBinding>
    26         </bindings>
    27         <client>
    28             <endpoint address="http://localhost:40121/mex" binding="basicHttpBinding"
    29                 bindingConfiguration="BasicHttpBinding_IUploadService" contract="IUploadService"
    30                 name="BasicHttpBinding_IUploadService" />
    31         </client>
    32     </system.serviceModel>
    33  <system.webServer>
    34     <modules runAllManagedModulesForAllRequests="true"/>
    35   </system.webServer>
    36   
    37 </configuration>

    服务端代码

     1 /// <summary>
     2     /// 
     3     /// </summary>
     4     [ServiceContract]
     5     public interface IUploadService
     6     {
     7         /// <summary>
     8         /// 
     9         /// </summary>
    10         /// <param name="fileName"></param>
    11         /// <param name="fileBuffer"></param>
    12         [OperationContract]
    13         void UploadFile(string fileName, byte[] fileBuffer);
    14     }
     1     /// <summary>
     2     /// 
     3     /// </summary>
     4     public class UploadService : IUploadService
     5     {
     6         /// <summary>
     7         /// 
     8         /// </summary>
     9         /// <param name="fileName">文件名</param>
    10         /// <param name="fileBuffer">文件流字节</param>
    11         public void UploadFile(string fileName,byte[] fileBuffer)
    12         {
    13             FileStream fs = new FileStream("D:\" + fileName, FileMode.OpenOrCreate);
    14             BinaryWriter writer = new BinaryWriter(fs);
    15             try
    16             {
    17                 long offset = 0;//fs.Length;
    18                 writer.Seek((int)offset, SeekOrigin.End);
    19                 writer.Write(fileBuffer);
    20             }
    21             catch (Exception e)
    22             {
    23             }
    24             finally
    25             {
    26                 writer.Close();
    27                 writer.Dispose();
    28                 fs.Close();
    29             }
    30         }
    31     }

    代码下载 大文件处理[上传].rar

  • 相关阅读:
    tcp/ip协议
    soap协议
    JS引擎运行js过程
    clear:both可以清除浮动的原理(给子元素设置clear:both相当于给它自动设置了1个mrgin-top外边距从而可以撑开父盒子高度)
    BFC详解
    圣杯布局和双飞翼布局的作用和区别
    flex布局之space-evenly兼容性不好,巧用space-between实现space-evenly效果
    css巧用 transform的 rotate属性得到三角形箭头(取代iconfont的字体符号)
    li 鼠标悬停抖动问题
    小米官网首页商品列表鼠标悬停动画和阴影效果
  • 原文地址:https://www.cnblogs.com/yf2011/p/4380026.html
Copyright © 2011-2022 走看看