代码之家  ›  专栏  ›  技术社区  ›  ChrisHDog

如何将大(>25MB)文件上传到web服务?

  •  29
  • ChrisHDog  · 技术社区  · 17 年前

    这适用于“小”文件,但一旦达到一定大小,web服务就会失败并返回“请求失败,HTTP状态为404:未找到”

    据我所知,这似乎是一个IIS设置,它限制了可以发布的文件的大小(以防止拒绝服务攻击)。我试图增加该设置,但在确定设置内容以及设置位置/方式时遇到了问题。我使用的是IIS7,Web服务是在.net(asmx)中完成的。

      <system.web>
         <httpRuntime executionTimeout="999999" maxRequestLength="2097151" />
         ...
      </system.web>
    

    8 回复  |  直到 17 年前
        1
  •  31
  •   ChrisHDog    17 年前

    除了问题中提到的httpRuntime/maxRequestLength之外,似乎还有一个附加项可以添加到web服务的web.config文件中,以允许大文件传输。

      <system.webServer>
        <security>
          <requestFiltering>
            <requestLimits maxAllowedContentLength="2000000000" />
          </requestFiltering>
        </security>
      </system.webServer>
    

        2
  •  5
  •   John Saunders    17 年前

        3
  •  5
  •   Sam Saffron James Allen    17 年前

    如果我不得不使用web服务并且需要支持非常大的文件,我会考虑实现一个允许您分块上传文件的系统。

    这将允许您将大的上传内容分块,而不会在内存中保存太多数据。缺点是您仍然使用相当低效的传输机制。

        4
  •  5
  •   sonstabo    16 年前

    C: \程序文件\通用文件\ Microsoft共享\ Web服务器扩展\ 12\ISAPI

    <location path="Copy.asmx"> <!-- Name of you asmx -->
        <system.webServer>
          <security>
            <requestFiltering>
              <requestLimits maxAllowedContentLength="104857600"/> <!-- 100 megs -->
            </requestFiltering>
          </security>
        </system.webServer>
      </location>
    

        5
  •  4
  •   Tyler    17 年前

    如果您打算使用Web服务来移动文件,我至少会考虑使用WS-Attachment/DIME附件。通过web服务发送byte[]的主要问题是,它们被放入SOAP正文中,SOAP正文被编码为基本64字符串

    我强烈建议 reading this.

    微软的WSE工具包允许大型 使用DIME和 WS-Attachments标准。我们会 Web中的二进制数据量 通过其他公共电话进行服务呼叫

    希望这能有所帮助!

        6
  •  1
  •   richardtallent    17 年前

    maxRequestLength的单位是KB,而不是字节。这应该会在4分钟的超时窗口内为您提供30 MB的限制。

    <httpRuntime executionTimeout="240" maxRequestLength="30000" />
    

    数字太高实际上可能会阻止你的价值观被应用。一、 几年前,当我认为这是字节限制(模糊记忆)时,我遇到了这个问题。

        7
  •  1
  •   NotDan    17 年前

    这并没有具体回答你的问题,但我过去所做的是使用WCF传输文件名/路径/列表,然后使用FTP库通过FTP传输文件。

        8
  •  0
  •   Dragos Durlut    14 年前

    这对我奏效了:

                <binding name="uploadFilesBasicHttpBinding" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" receiveTimeout="00:10:10" sendTimeout="00:10:00" openTimeout="00:10:00" closeTimeout="00:10:00">
                    <readerQuotas maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxDepth="2147483647" maxNameTableCharCount="2147483647" maxStringContentLength="2147483647"/>
                    <security mode="TransportWithMessageCredential">
                        <message clientCredentialType="UserName"/>
                    </security>
                </binding>
    
    推荐文章