zoukankan      html  css  js  c++  java
  • WCF利用Stream上传大文件

    转自别人的文章,学习这个例子,基本上wcf也算入门了,接口用法、系统配置都有了

    本文展示了在asp.net中利用wcf的stream方式传输大文件,解决了大文件上传问题。主要是存档方便以后遇到该问题是来查阅。贴出部分代码,如果有疑惑或需要完整代码的请留言
    WebForm1.aspx.cs

    protected void Button1_Click(object sender, EventArgs e)
            {
                FileData file = new FileData();
                file.filename = FileUpload1.FileName;
                file.data = FileUpload1.PostedFile.InputStream;
                GetDataService c = new GetDataService();
                c.UploadFile(file);
                Response.Write("文件传输成功!");
    }

    IService1

    namespace WcfService1
    {
        // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IService1”。
        [ServiceContract]
        public interface IGetDataService
        {
            [OperationContract]
            void UploadFile(FileData file);
        }
        [MessageContract]
        public class FileData
        {
            [MessageHeader]
            public string filename;
            [MessageBodyMember]
            public Stream data;
        }
    
    
    
    }

    Service1.svc

    namespace WcfService1
    {
        public class GetDataService : IGetDataService
        {
            public void UploadFile(FileData file)
            {
                
                FileStream fs = new FileStream("D:\\我的项目\\WcfService1\\Files\\" + file.filename, FileMode.OpenOrCreate);
    
                try
                {
    
                    BinaryReader reader = new BinaryReader(file.data);
    
                    byte[] buffer;
    
                    BinaryWriter writer = new BinaryWriter(fs);
                    long offset = fs.Length;
                    writer.Seek((int)offset, SeekOrigin.Begin);
    
                    do
                    {
    
                        buffer = reader.ReadBytes(1024);
    
                        writer.Write(buffer);
    
                    } while (buffer.Length > 0);
    
                    fs.Close();
                    file.data.Close();
    
                }
                catch (Exception e)
                {
                    throw new Exception(e.Message);
                }
                finally
                {
    
                    fs.Close();
                    file.data.Close();
    
                }
    
            }
        }


     

    web.config

    <configuration>
    
      <system.web>
        <compilation debug="true" targetFramework="4.0" />
          <httpRuntime   maxRequestLength="40960" />
      </system.web>
        <system.serviceModel>
            <bindings>
                <basicHttpBinding>
                    <binding name="BasicHttpBinding_IGetDataService" closeTimeout="00:01:00"
                        openTimeout="00:01:00" receiveTimeout="01:10:00" sendTimeout="01:10:00"
                        allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                        maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                        transferMode="Streamed"
                        useDefaultWebProxy="true">
                        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                            maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                        <security mode="None">
                            <transport clientCredentialType="None" proxyCredentialType="None"
                                realm="" />
                            <message clientCredentialType="UserName" algorithmSuite="Default" />
                        </security>
                    </binding>
                </basicHttpBinding>
            </bindings>
            <client>
                <endpoint address="http://localhost:52884/mex" binding="basicHttpBinding"
                    bindingConfiguration="BasicHttpBinding_IGetDataService" contract="IGetDataService"
                    name="BasicHttpBinding_IGetDataService" />
            </client>
        </system.serviceModel>
     <system.webServer>
        <modules runAllManagedModulesForAllRequests="true"/>
      </system.webServer>
      
    </configuration>


    看到有好几位同学想要源码的,我重新做了个测试工程,经测试只要网络支持,是可以上传几十M以上的大文件的

    附上测试工程项目源码:https://files.cnblogs.com/easywebfactory/WcfService1.rar

  • 相关阅读:
    170601、单例模式的三种水平代码(第三种最佳)
    解决打开pycharm有带图片md文件卡死问题
    Dockerfile 操作
    Docker 命令大全
    MAC
    mac 搭建selenium与ChromeDriver环境
    Mac进行 usr/bin 目录下修改权限问题,operation not permitted
    pytest文档6-fixture之yield实现teardown
    pytest文档5-fixture之conftest.py
    pytest文档4-测试用例setup和teardown
  • 原文地址:https://www.cnblogs.com/easywebfactory/p/2495040.html
Copyright © 2011-2022 走看看