Apigee Large File Upload Failing with 405

Hello,

I am trying to upload a file of size approximately 11.4MB , I am getting the below response from Apigee . We have a requirement to upload files upto 1.5GB. 

 

My Proxy endpoint looks like this . 

 

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ProxyEndpoint name="default">
    <Description/>
    <FaultRules>
        <FaultRule name="signatureError">
            <Step>
                <Name>FA-Error</Name>
            </Step>
        </FaultRule>
    </FaultRules>
    <PreFlow name="PreFlow">
        <Request>
            <Step>
                <Condition>(request.path MatchesPath "/*/init/**")</Condition>
                <Name>Extract-RelayState</Name>
            </Step>
            <Step>
                <Condition>(request.path MatchesPath "/*/init/**")</Condition>
                <Name>Assign-Message-1</Name>
            </Step>
            <Step>
                <Condition>(request.path MatchesPath "/*/init/**")</Condition>
                <Name>Java-SamlDecode</Name>
            </Step>
            <Step>
                <Condition>(request.path MatchesPath "/*/init/**")</Condition>
                <Name>AM-ContrivedMessage-1</Name>
            </Step>
            <Step>
                <Condition>(request.path MatchesPath "/*/init/**")</Condition>
                <Name>SAML_Assertion</Name>
            </Step>
            <Step>
                <Condition>(request.path MatchesPath "/*/init/**")</Condition>
                <Name>Java_XPath</Name>
            </Step>
            <Step>
                <Condition>(request.path MatchesPath "/*/init/**")</Condition>
                <Name>Create_SOAP_Request</Name>
            </Step>
            <Step>
                <Condition>(request.path MatchesPath "/*/init/**")</Condition>
                <Name>Service-Callout-Fed-Auth</Name>
            </Step>
            <Step>
                <Condition>(request.path MatchesPath "/*/init/**")</Condition>
                <Name>Extract-variables-from-FedAuth-Response</Name>
            </Step>
            <Step>
                <Condition>(request.path MatchesPath "/*/init/**")</Condition>
                <Name>Set-FTF-Headers</Name>
            </Step>
            <Step>
                <Condition>(request.path MatchesPath "/*/init/**")</Condition>
                <Name>Assign-Message-2</Name>
            </Step>
        </Request>
        <Response/>
    </PreFlow>
    <PostFlow name="PostFlow">
        <Request/>
        <Response/>
    </PostFlow>
    <Flows/>
    <HTTPProxyConnection>
        <BasePath>/ftf-angular/*</BasePath>
       <Properties/>
    </HTTPProxyConnection>
    <RouteRule name="init">
        <TargetEndpoint>init</TargetEndpoint>
        <Condition>(request.path MatchesPath "/*/init/**")</Condition>
    </RouteRule>
    <RouteRule name="rd">
        <TargetEndpoint>rd</TargetEndpoint>
        <Condition>(request.path MatchesPath "/*/rd/**")</Condition>
    </RouteRule>
    <RouteRule name="assets">
        <TargetEndpoint>assets</TargetEndpoint>
        <Condition>(request.path MatchesPath "/*/assets/**")</Condition>
    </RouteRule>
    <RouteRule name="api">
        <TargetEndpoint>api</TargetEndpoint>
        <Condition>(request.path MatchesPath "/**/api/**")</Condition>
    </RouteRule>
    <RouteRule name="default">
        <TargetEndpoint>default</TargetEndpoint>
    </RouteRule>
</ProxyEndpoint>

 

If i enable  the below

 

   <Properties>
      <Property name="allow.http10">true</Property>
      <Property name="response.streaming.enabled">true</Property>
      <Property name="request.streaming.enabled">true</Property>
    </Properties>

 

My existing flows are failing. 

as my base path is something like /ftf-angular/* .

How do i selectively enable streaming for the api call something like  

/ftf-angular/internal/stats/api/uploadfile 

Thanks

 

0 1 68
1 REPLY 1

I am getting the below response from Apigee .

You didn't show any error message.

We have a requirement to upload files upto 1.5GB.

That exceeds the documented limit of 10mb. Apigee won't work for streaming large data files. So I think you need to consider alternative designs.

One is to use a Google Cloud Storage bucket to store the file, and allow Apigee to act as the control channel for the transfer, using signed URLs. This Github repo shows a Java callout that you can use to  help implement that pattern. 

And here is a screencast that explains the pattern.