1

可能重复:
如何将大于 5 MB(大约)的文件上传到 Amazon S3(官方 SDK)?

我尝试使用 Amazon.S3.IO API。如果我写 10mb 没有问题。如果我写 21mb 我得到一个例外:

请求被中止:请求被取消。

堆栈跟踪:
在 System.Net.ConnectStream.CloseInternal(Boolean internalCall, Boolean aborting) 在 System.Net.ConnectStream.System.Net.ICloseEx.CloseEx(CloseExState closeState) 在 System.Net.ConnectStream.Dispose(Boolean disposing) 在 System.IO。 Stream.Close() at System.IO.Stream.Dispose() 在 Amazon.S3.AmazonS3Client.getRequestStreamCallback[T](IAsyncResult 结果) 在 Amazon.S3.AmazonS3Client.endOperation[T](IAsyncResult 结果) 在 Amazon.S3。 AmazonS3Client.EndPutObject(IAsyncResult asyncResult) 在 Amazon.S3.AmazonS3Client.PutObject(PutObjectRequest request) 在 Amazon.S3.IO.S3FileStream.Flush(Boolean flushToS3) 在 Amazon.S3.IO.S3FileStream.Dispose(Boolean disposing) 在 System。 IO.Stream.Close() 在 System.IO.StreamWriter.Dispose(Boolean disposing) 在 System.IO.TextWriter.Dispose() 在 S3FileSystem_Sample.Program。c:\Program Files (x86)\AWS SDK for .NET\Samples\S3FileSystem_Sample\S3FileSystem_Sample\Program.cs 中的 createFile(S3DirectoryInfo rootDirectory, String filename):c 中 S3FileSystem_Sample.Program.Main(String[] args) 的第 106 行:\Program Files (x86)\AWS SDK for .NET\Samples\S3FileSystem_Sample\S3FileSystem_Sample\Program.cs:System.AppDomain._nExecuteAssembly(RuntimeAssembly 程序集,String[] args)的第 59 行在 System.AppDomain.ExecuteAssembly(字符串 assemblyFile , 证据 assemblySecurity, String[] args) 在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 在 System.Threading.ThreadHelper.ThreadStart_Context(Object state) 在 System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state , Boolean preserveSyncCtx) 在 System.Threading.ExecutionContext。Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart()

static void createFile(S3DirectoryInfo rootDirectory, string filename)
{ 

    // Creates a file at the root of the bucket.
    S3FileInfo readme = rootDirectory.GetFile(filename);
    char[] buffer = new char[buffersize];  
    fillBuffer(buffer);

    using (StreamWriter writer = new StreamWriter(readme.OpenWrite()))
    {              

        writer.Write(buffer);

    }
}

知道我可以设置超时吗?

单击此处此处了解更多相关问题。

4

1 回答 1

4

不幸的是,Amazon.S3.IO API 不支持设置超时,但作为 SDK 的开发人员,我会将该功能请求添加到我们的待办事项中。

请记住,Amazon.S3.IO API 是一个非常容易使用 S3 的接口,但它不太适合大文件,因为它会将它们缓冲到内存中,直到您将文件的全部内容传递给 API,然后将其写入 S3。对于大文件,您应该使用 Amazon.S3.Transfer 命名空间中的 TransferUtility。

于 2012-11-13T22:21:21.563 回答