从Visual Studio 2015上传文件至AWS Cloud遇NameResolutionFailure错误求助
解决AWS S3上传时的
NameResolutionFailure异常问题 看起来你遇到的NameResolutionFailure问题大概率和代码里S3存储桶的错误拼接方式有关,结合你的代码和问题描述,我整理了几个针对性的解决方向:
1. 修正错误的Bucket名称拼接逻辑(最核心原因)
你代码里把subDirectoryInBucket直接拼到了BucketName里,这是完全错误的做法。AWS S3的存储桶名称不能包含斜杠/,当你这样拼接后,SDK会尝试解析类似bucketname/subdirectory.s3.us-west-2.amazonaws.com的无效域名,直接触发域名解析失败的NameResolutionFailure异常。
正确的S3逻辑是:存储桶名称保持纯净,子目录实际上是对象Key的前缀。修改后的代码如下:
public void sendMyFileToS3(System.IO.Stream localFilePath, string bucketName, string subDirectoryInBucket, string fileNameInS3) { IAmazonS3 client = new AmazonS3Client(RegionEndpoint.USWest2); TransferUtility utility = new TransferUtility(client); TransferUtilityUploadRequest request = new TransferUtilityUploadRequest(); // 直接设置原始bucket名称,不要添加子目录 request.BucketName = bucketName; // 将子目录作为文件Key的前缀 request.Key = string.IsNullOrEmpty(subDirectoryInBucket) ? fileNameInS3 : $"{subDirectoryInBucket}/{fileNameInS3}"; request.InputStream = localFilePath; try { utility.Upload(request); } catch (Exception ex) { // 建议包装异常保留原始信息,方便后续调试 throw new Exception("上传文件至S3失败", ex); } }
2. 排查网络与域名解析问题
NameResolutionFailure本质是本地无法解析S3的服务域名,你可以做以下验证:
- 打开命令提示符,执行
nslookup s3.us-west-2.amazonaws.com,检查是否能正常返回IP地址。如果无法解析,说明本地DNS配置异常,或者公司防火墙/代理阻止了域名解析请求。 - 如果你的网络环境使用代理服务器,需要给AWS SDK配置代理信息:
var s3Config = new AmazonS3Config { ProxyHost = "你的代理服务器地址", ProxyPort = 代理端口号, // 若代理需要认证,添加以下配置 ProxyCredentials = new System.Net.NetworkCredential("代理用户名", "代理密码") }; IAmazonS3 client = new AmazonS3Client(s3Config);
3. 更新AWS SDK版本
Visual Studio 2015对应的.NET框架版本相对老旧,如果你使用的AWS SDK for .NET版本太低,可能存在端点解析的兼容性问题。建议通过NuGet包管理器搜索AWSSDK.S3,更新到兼容你当前.NET版本的最新SDK。
4. 确认存储桶与区域匹配
虽然你提到尝试了所有区域,但还是要确保代码里指定的RegionEndpoint和你的S3存储桶实际所在区域完全一致。比如存储桶位于美东(弗吉尼亚),应该使用RegionEndpoint.USEast1。
内容的提问来源于stack exchange,提问作者Harshit Verma
相关产品推荐
相关产品推荐

