Windows Azure:服务器错误,404 - 找不到文件或目录

时间:2010-04-13 22:08:55

标签: c# azure blob

我想将一些 35MB 的文件上传到blob容器中。 我编写了将数据拆分为块并将其上传到blob容器并使用PUT形成blob的编码。

我测试了一些大小为2MB 的文件的代码......它运行良好。但是当我尝试使用大型MB文件时,它给了我这个错误

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.

当我尝试大小为6MB的文件时,它会给我这个错误。

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 this 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>

谁能告诉我,如何解决这个问题......


上传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";
            }
        }

2 个答案:

答案 0 :(得分:1)

我的猜测是你正在达到ASP.NET限制......有一个最大请求大小以及最大请求超时。我会在web.config中进行更改并查看异常是什么。

答案 1 :(得分:0)

如此处所述:http://robertgreiner.com/2012/08/404-error-when-uploading-large-files-in-windows-azure/

  

我今天尝试使用我的MVC 4网站将30MB文件上传到Windows Azure。当文件达到99%时,我收到404错误,说我的上传操作无处可寻。幸运的是,我成功地在当天早些时候以大约一半的大小上传了一个文件,所以我知道该网站并没有完全破坏。

     

如果您遇到此错误,可能已经测试过在本地上传大型文件,并意识到您需要在Web.config中使用类似的内容才能正常工作:

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

但是,没有人告诉你的是,Windows Azure(即IIS 7)会查看完全不同的上传文件配置设置。

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