开发者

Windows Azure : Server Error , 404 - File or directory not found

I want to upload some files of size 35MB on to the blob container. I have coded for splitting the data into blocks and upload it on to the blob container and form a blob using PUT.

I tested the code for some files of Size 2MB or something... It worked well. But When I tried it for a large MB file, its giving me this error

Server Error
404 - File or directory not found.
The resource you are looking for might have been removed, had its name changed, or is temporarily unavailable.

when I tried it for files of size 6MB, it gives me this error..

Server Error in '/' Application.
Runtime Error
Description: An application error occurred on the server. The current custom error settings for this application prevent the details of the application error from being viewed remotely (for security reasons). It could, however, be viewed by browsers running on the local server machine.

Details: To enable the details of 开发者_StackOverflowthis specific error message to be viewable on remote machines, please create a <customErrors> tag within a "web.config" configuration file located in the root directory of the current web application. This <customErrors> tag should then have its "mode" attribute set to "Off".

<!-- Web.Config Configuration File -->

<configuration>
    <system.web>
        <customErrors mode="Off"/>
    </system.web>
</configuration>


Notes: The current error page you are seeing can be replaced by a custom error page by modifying the "defaultRedirect" attribute of the application's <customErrors> configuration tag to point to a custom error page URL.

<!-- Web.Config Configuration File -->

<configuration>
    <system.web>
        <customErrors mode="RemoteOnly" defaultRedirect="mycustompage.htm"/>
    </system.web>
</configuration>

Can anyone tell me, How to solve this...


The code for uploading the blob.

protected void ButUploadBlocks_click(object sender, EventArgs e)
        {

            // store upladed file as a blob storage
            if (uplFileUpload.HasFile)
            {
                name = uplFileUpload.FileName;
                byte[] byteArray = uplFileUpload.FileBytes;
                Int64 contentLength = byteArray.Length;
                int numBytesPerBlock = 250 *1024; // 250KB per block
                int blocksCount = (int)Math.Ceiling((double)contentLength / numBytesPerBlock);  // number of blocks 
                MemoryStream ms ;
                int length = 0;
                List<string>BlockIds = new List<string>();
                string block;
                int offset = 0;

                // get refernce to the cloud blob container
                CloudBlobContainer blobContainer = cloudBlobClient.GetContainerReference("documents");

                if (textbox.Text != "")
                {
                    name = textbox.Text + "/" + name;

                }
                // set the name for the uploading files
                string UploadDocName = name;

                // get the blob reference and set the metadata properties
                CloudBlockBlob blob = blobContainer.GetBlockBlobReference(UploadDocName);
                blob.Properties.ContentType = uplFileUpload.PostedFile.ContentType;

                for (int i = 0; i < blocksCount; i++, offset = offset + numBytesPerBlock)
                {
                    block = Convert.ToBase64String(BitConverter.GetBytes(i));
                    ms = new MemoryStream();
                    if (i == (blocksCount - 1))
                    {
                        length = (int)contentLength - offset;
                    }
                    else
                    {
                        length = numBytesPerBlock;
                    }
                    ms.Write(byteArray, offset, length);
                    ms.Position = 0;

                    blob.PutBlock(block, ms, null);
                    BlockIds.Add(block);
                }

                blob.PutBlockList(BlockIds);

                blob.Metadata["FILETYPE"] = "text";
            }
        }


My guess would be that you're hitting an ASP.NET limit... there's a max request size as well as a max request timeout. I'd make the change suggested in web.config and see what the exception is.


as mentioned here: http://robertgreiner.com/2012/08/404-error-when-uploading-large-files-in-windows-azure/

I tried to upload a 30MB file into Windows Azure today using my MVC 4 site. When the file got to 99% I got a 404 error saying that my upload Action was nowhere to be found. Fortunately, I successfully uploaded a file earlier in the day at about half the size, so I knew the site wasn’t completely broken.

If you are experiencing this error, chances are you already tested uploading large files locally and realized that you need something like this in your Web.config for everything to work:

<system.web>
    <httpRuntime maxRequestLength="1073741824" requestValidationMode="2.0" />
</system.web>

However, what nobody tells you, is that Windows Azure (i.e. IIS 7) looks at a completely different configuration setting for uploading files.

<system.webServer>
  <security>
    <requestFiltering>
      <requestLimits maxAllowedContentLength="1073741824" />
    </requestFiltering>
  </security>
</system.WebServer>
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜