我想将一些本地应用程序移动到亚马逊云中,该云在内部适用于FileInfo
以处理某些文件。
我知道存储桶概念以及使用S3FileInfo
的文件自适应,它指向存储桶中存储的文件。
但是由于应用程序正在使用FileInfo
,我想知道是否有可能以某种方式创建指向存储桶中文件的FileInfo
实例?
答案 0 :(得分:2)
FileInfo类不能直接用于S3对象。你可以做几件事:
您可以使用TntDrive之类的工具。然后,您可以访问您通常会执行的文件,例如:
FileInfo file = new FileInfo(@"Z:\Path\myfile.doc");
这样,文件系统依赖性仅封装在TextFilePersistanceProvider类中,其余应用程序可以与任何源一起使用。
public interface IGamePersistanceProvider
{
void Save(Game game);
}
public class TextFilePersistanceProvider : IGamePersistanceProvider
{
private IConfigurationProvider _configurationProvider;
public TextFilePersistanceProvider(IConfigurationProvider configurationProvider)
{
_configurationProvider = configurationProvider;
}
public void Save(Game game)
{
if (game == null) { throw new ArgumentException("Unexpected parameter"); }
var filePath = _configurationProvider.GetValue<string>("LatestGamePath");
var gameAsJson = JsonConvert.SerializeObject(game, Formatting.None, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto });
File.WriteAllText(filePath, gameAsJson);
}
}
public class S3PersistanceProvider : IGamePersistanceProvider
{
private IConfigurationProvider _configurationProvider;
public S3PersistanceProvider(IConfigurationProvider configurationProvider)
{
_configurationProvider = configurationProvider;
}
public void Save(Game game)
{
if (game == null) { throw new ArgumentException("Unexpected parameter"); }
var gameAsJson = JsonConvert.SerializeObject(game, Formatting.None, new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.Auto,
});
string accessKey = _configurationProvider.GetValue<dynamic>("S3Credentials").AccessKey.ToString();
string secretKey = _configurationProvider.GetValue<dynamic>("S3Credentials").SecretKey.ToString();
string bucketName = _configurationProvider.GetValue<dynamic>("S3Credentials").BucketName.ToString();
string key = game.Name;
using (var s3Client = new AmazonS3Client(new BasicAWSCredentials(accessKey, secretKey), RegionEndpoint.EUWest1))
{
var transferUtil = new TransferUtility(s3Client);
var memStream = new MemoryStream(Encoding.UTF8.GetBytes(gameAsJson));
transferUtil.Upload(memStream, bucketName, key);
}
}
}
我希望这有点帮助。