Windows Azure: ошибка сервера, 404 - файл или каталог не найдены - PullRequest
1 голос
/ 14 апреля 2010

Я хочу загрузить некоторые файлы размером 35 МБ в контейнер BLOB-объектов. Я написал код для разделения данных на блоки и загрузки их в контейнер BLOB-объектов и формирования BLOB-объекта с помощью PUT.

Я тестировал код для некоторых файлов Размер 2 МБ или что-то еще ... Он работал хорошо. Но когда я попробовал его для большого файла 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.

когда я пробовал это для файлов размером 6 МБ , это выдает мне эту ошибку ..

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 ]

1 голос
/ 14 апреля 2010

Полагаю, вы достигли предела ASP.NET ... есть максимальный размер запроса, а также максимальное время ожидания запроса. Я внесу изменения, предложенные в web.config, и посмотрю, что это за исключение.

0 голосов
/ 24 мая 2018

как упомянуто здесь: http://robertgreiner.com/2012/08/404-error-when-uploading-large-files-in-windows-azure/

Я пытался загрузить файл размером 30 МБ в Windows Azure сегодня, используя свой сайт MVC 4. Когда файл достиг 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>
...