带有C#FileStreamResult的AmazonS3
我正在尝试将AmazonS3(AWSSDK.S3包)连接到我的ASP.NET核心Web应用程序。我在控制器中有此操作带有C#FileStreamResult的AmazonS3,c#,asp.net-core,amazon-s3,C#,Asp.net Core,Amazon S3,我正在尝试将AmazonS3(AWSSDK.S3包)连接到我的ASP.NET核心Web应用程序。我在控制器中有此操作 public async Task<IActionResult> GetFile(string path) { string contentType; new FileExtensionContentTypeProvider().TryGetContentType(path, out contentType);
public async Task<IActionResult> GetFile(string path)
{
string contentType;
new FileExtensionContentTypeProvider().TryGetContentType(path, out contentType);
contentType = contentType ?? "application/octet-stream";
try
{
var file = await _fileService.DownloadFile(path);
return new FileStreamResult(file, contentType)
{
FileDownloadName = path
};
}
catch (Exception ex)
{
return NotFound();
}
}
公共异步任务GetFile(字符串路径)
{
字符串内容类型;
新文件扩展ContentTypeProvider().TryGetContentType(路径,out contentType);
contentType=contentType??“应用程序/八位字节流”;
尝试
{
var file=await\u fileService.DownloadFile(路径);
返回新的FileStreamResult(文件,contentType)
{
FileDownloadName=path
};
}
捕获(例外情况除外)
{
返回NotFound();
}
}
_fileService.DwonloadFile如下所示:
public async Task<Stream> DownloadFile(string fileName)
{
var bucketName = fileName.Split('/')[0];
var fileKey = fileName.Substring(fileName.IndexOf('/') + 1);
return await _s3service.GetObjectFromS3Async(bucketName, fileKey);
}
public async Task<Stream> GetObjectFromS3Async(string bucketName, string keyName)
{
try
{
var request = new GetObjectRequest
{
BucketName = bucketName,
Key = keyName
};
using (var response = await Client.GetObjectAsync(request))
using (var responseStream = response.ResponseStream)
{
return responseStream;
}
}
catch /*(Exception e)*/
{
return null;
}
}
公共异步任务下载文件(字符串文件名)
{
var bucketName=fileName.Split('/')[0];
var fileKey=fileName.Substring(fileName.IndexOf('/')+1);
返回wait\u s3service.GetObjectFromS3Async(bucketName,fileKey);
}
和s3service.GetObjectFromS3Async如下所示:
public async Task<Stream> DownloadFile(string fileName)
{
var bucketName = fileName.Split('/')[0];
var fileKey = fileName.Substring(fileName.IndexOf('/') + 1);
return await _s3service.GetObjectFromS3Async(bucketName, fileKey);
}
public async Task<Stream> GetObjectFromS3Async(string bucketName, string keyName)
{
try
{
var request = new GetObjectRequest
{
BucketName = bucketName,
Key = keyName
};
using (var response = await Client.GetObjectAsync(request))
using (var responseStream = response.ResponseStream)
{
return responseStream;
}
}
catch /*(Exception e)*/
{
return null;
}
}
公共异步任务GetObjectFromS3Async(字符串bucketName、字符串keyName)
{
尝试
{
var request=newgetobjectrequest
{
BucketName=BucketName,
Key=keyName
};
使用(var response=await Client.GetObjectAsync(请求))
使用(var responseStream=response.responseStream)
{
返回响应团队;
}
}
catch/*(例外情况e)*/
{
返回null;
}
}
但此代码无法正常工作:在浏览器中,我得到的文件名正确,但大小为0B。我怎样才能解决这个问题