[英]Amazon S3 loading Issue in upload file in multipart
當我使用Amazon S3 multipart上傳文件然后加載時,文件未成功上傳。 在e.PercentDone
為100之后,此函數中的uploadRequest_UploadPartProgressEvent
面臨加載問題,網頁正在加載無限時間。
protected void Button1_Click(object sender, EventArgs e)
{
if (FileUpload1.HasFile)
{
extension = Path.GetExtension(FileUpload1.FileName);
fileSize = FileUpload1.PostedFile.ContentLength;
Stream st = FileUpload1.PostedFile.InputStream;
string name = Path.GetFileName(FileUpload1.FileName);
string fName = Path.GetFileNameWithoutExtension(name);
string fExt = Path.GetExtension(name);
string strRes = String.Concat(fName, builder.ToString());
string strRes1 = String.Concat(strRes, fExt);
string s3FileName = @strRes1;
stt = st;
fileNameInS3 = s3FileName;
bool a;
TrackMPUAsync().Wait();
}
}
public async Task TrackMPUAsync()
{
try
{
TransferUtility fileTransferUtility = new TransferUtility(s3Client);
// Use TransferUtilityUploadRequest to configure options.
// In this example we subscribe to an event.
TransferUtilityUploadRequest uploadRequest =
new TransferUtilityUploadRequest
{
BucketName = bucketName + @"/" + foldername,
Key = filename,
InputStream = fileInputStrem
};
uploadRequest.UploadProgressEvent +=
new EventHandler<UploadProgressArgs>
(uploadRequest_UploadPartProgressEvent);
await fileTransferUtility.UploadAsync(uploadRequest);
Console.WriteLine("Upload completed");
}
catch (AmazonS3Exception e)
{
Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message);
}
catch (Exception e)
{
Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message);
}
}
public void uploadRequest_UploadPartProgressEvent(object sender,
UploadProgressArgs e)
{
// Process event.
Console.WriteLine("{0}/{1}", e.TransferredBytes, e.TotalBytes);
}
還有其他人遇到過這個問題嗎?
我有一些建議可以找到一個有效的解決方案,但說實話,我沒有運行你的代碼(這是基於快速審查它)。 首先, BucketName
屬性必須設置為存儲桶[1]的確切名稱,因此不應向其添加文件夾名稱。 相反,應將文件夾名稱添加為Key
上的前綴:
BucketName = bucketName,
Key = foldername + @"/" + filename,
接下來,使用Console.WriteLine
可能很難看到捕獲的錯誤。 看來這是WinForms應用程序的一部分,所以也許使用Debug.WriteLine()
[2]來顯示Visual Studio(或代碼等)中的錯誤將是一個好主意。
最后,也許重要的是,在事件處理程序中使用TrackMPUAsync().Wait()
是同步的,並且將阻塞直到上傳完成[3],而您可能想要異步執行上載:
Task.Run(() => TrackMPUAsync());
希望這是有幫助的。
[1] https://docs.aws.amazon.com/AmazonS3/latest/dev/HLuploadFileDotNet.html
[2] https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.debug.writeline
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.