0
나는 Azure blob에서 다운로드하기 위해 SAS 키를 사용하고 있습니다. 웹 역할 인스턴스에서 BLOB를 하늘 저장소에서 스트리밍 한 다음 브라우저로 직접 스트리밍합니다. 그것은 작은 파일에 잘 작동하지만 내가 (이 경우 1.7GB)를 큰 파일을 다운로드하려고 할 때, 나는 다음과 같은 StorageException 수 :푸른 하늘에서 다운로드 할 때 "전송 연결에서 데이터를 읽을 수 없습니다 : 연결이 닫혔습니다."라는 메시지가 나타납니다.
try
{
Blob = new Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob(new Uri(BlobSasUri));
httpResponse.Clear();
httpResponse.ClearHeaders();
httpResponse.ClearContent();
httpResponse.BufferOutput = false;
httpResponse.ContentType = Utilities.GetMIMEType(FileName);
string contentDisposition;
var browser = context.HttpContext.Request.Browser.Browser;
var version = context.HttpContext.Request.Browser.Version;
if (browser == "IE" && (version == "7.0" || version == "8.0" || version == "9.0"))
contentDisposition = "attachment; filename=" + Uri.EscapeDataString(FileName);
else if (browser == "Safari")
contentDisposition = "attachment; filename=" + FileName;
else
{
// Android Chrome browser unable to use UTF-8 encoding
if (Regex.IsMatch(context.HttpContext.Request.UserAgent, @"Android") &&
Regex.IsMatch(context.HttpContext.Request.UserAgent, @"Chrome"))
{
contentDisposition = "attachment; filename=" + Uri.EscapeDataString(FileName).Replace("'", Uri.HexEscape('\''));
}
else
{
// This is RFC5987 format, specifying use of utf-8. Apostrophes must be encoded for Chrome.
contentDisposition = "attachment; filename*=UTF-8''" +
Uri.EscapeDataString(FileName).Replace("'", Uri.HexEscape('\''));
}
}
httpResponse.AddHeader("Content-Disposition", contentDisposition);
httpResponse.AddHeader("Content-Length", eBFile.FileSize.ToString(CultureInfo.InvariantCulture));
Blob.DownloadToStream(
httpResponse.OutputStream
);
// More gracefully ends the http request
httpApp.CompleteRequest();
}
catch (Exception ex)
{
throw ex;
}
: 여기
{Microsoft.WindowsAzure.Storage.StorageException: Unable to read data from the transport connection: The connection was closed. ---> System.IO.IOException: Unable to read data from the transport connection: The connection was closed.
at System.Net.ConnectStream.EndRead(IAsyncResult asyncResult)
at Microsoft.WindowsAzure.Storage.Core.Util.StreamExtensions.WriteToSync(Stream stream, Stream toStream, Nullable`1 maxLength, Nullable`1 expiryTime, Boolean calculateMd5, Boolean syncRead, OperationContext operationContext, StreamDescriptor streamCopyState)
at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync[T](StorageCommandBase`1 cmd, IRetryPolicy policy, OperationContext operationContext)
--- End of inner exception stack trace ---
at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync[T](StorageCommandBase`1 cmd, IRetryPolicy policy, OperationContext operationContext)
at Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob.DownloadRangeToStream(Stream target, Nullable`1 offset, Nullable`1 length, AccessCondition accessCondition, BlobRequestOptions options, OperationContext operationContext)
내 호출 코드를
하늘색 라이브러리 스트림이 조기에 중단 될 수있는 원인에 대한 아이디어가 있습니까? 내 다운로드 속도는 괜찮은 30Mbps입니다. 매우 감사!