分片上传接口 关于ContentType的配置 ContentType用于标识文件的资源类型,比如image/png, image/jpg 是图片类型,video/mpeg, video/mp4是视频类型,text/plain, text/html是文本类型, 浏览器针对不同的ContentType会有不同的操作,比如图片类型可以预览,视频类型可以播放,文本类型可以直接打开。application/octetstream类型会直接打开下载窗口。 在dotnet sdk中,如果用户没有设置ContentType,会根据对象的key后缀扩展名自动生成ContentType。 上传分片 功能说明 分片上传操作可以将超过5GB的大文件分割后上传,一共包含三个步骤:首先,发起分片上传请求获取一个upload id。然后,将大文件分割成分片后上传,除了最后一个分片,每个分片的数据大小为5MB~5GB,每个分片上传的时候附带upload id。最后,发送一个带有upload id的请求,完成分片上传操作。 代码示例 plaintext using System; using System.Collections.Generic; using System.IO; using System.Threading.Tasks; using Amazon.Runtime; using Amazon.S3; using Amazon.S3.Model; namespace DotNetSDK.ObjectOperation { public class UploadPartExample { public static async Task UploadPart() { var accessKey " "; var secretKey " "; var endpoint " "; var bucketName " "; var key " "; var filePath " "; try { var credentials new BasicAWSCredentials(accessKey, secretKey); var conf new AmazonS3Config { ServiceURL endpoint }; var s3Client new AmazonS3Client(credentials, conf); //1. 发起一个分片上传操作请求,获取upload id var initiateMultipartUploadRequest new InitiateMultipartUploadRequest() { BucketName bucketName, Key key }; var initiateMultipartUploadResponse await s3Client.InitiateMultipartUploadAsync(initiateMultipartUploadRequest); var uploadId initiateMultipartUploadResponse.UploadId; Console.WriteLine("upload id: {0}", uploadId); // 2. 分割大文件然后分片上传 var partSize 1024 1024 16; var fileInfo new FileInfo(filePath); var fileLen fileInfo.Length; var partNumber fileLen / partSize; if (fileLen % partSize ! 0) { partNumber++; } var etagList new List (); using (var fs File.Open(filePath, FileMode.Open)) { for (var i 0; i < partNumber; i++) { var seekBytes (long) partSize i; fs.Seek(seekBytes, 0); var size (partSize < fileLen seekBytes) ? partSize : (fileLen seekBytes); var uploadPartRequest new UploadPartRequest() { BucketName bucketName, Key key, UploadId uploadId, InputStream fs, PartSize size, PartNumber i + 1 }; // 分片上传 var uploadPartResponse await s3Client.UploadPartAsync(uploadPartRequest); etagList.Add(new PartETag(uploadPartResponse.PartNumber, uploadPartResponse.ETag)); Console.WriteLine("finish upload part {0}/{1}", etagList.Count, partNumber); } } // 3. 完成分片上传 var completeMultipartUploadRequest new CompleteMultipartUploadRequest() { BucketName bucketName, Key key, UploadId uploadId }; foreach (var etag in etagList) { completeMultipartUploadRequest.PartETags.Add(etag); } var completeMultipartUploadResponse await s3Client.CompleteMultipartUploadAsync(completeMultipartUploadRequest); if (completeMultipartUploadResponse.HttpStatusCode ! System.Net.HttpStatusCode.OK) { Console.WriteLine("fail to complete multipart upload, HttpStatusCode:{0}, ErrorCode:{1}.", (int) completeMultipartUploadResponse.HttpStatusCode, completeMultipartUploadResponse.HttpStatusCode); } else { Console.WriteLine("complete multipart upload."); } } catch (Exception e) { Console.WriteLine(e.Message); } } } }
来自: