此問題的背景是基於我正在開發的虛擬文件系統。我使用的概念是不同類型存儲類型的虛擬路徑提供者,即本地文件系統,Dropbox和亞馬遜S3。我的虛擬文件的基類如下所示:使用虛擬路徑提供程序和Amazon S3 SDK上載文件
public abstract class CommonVirtualFile : VirtualFile {
public virtual string Url {
get { throw new NotImplementedException(); }
}
public virtual string LocalPath {
get { throw new NotImplementedException(); }
}
public override Stream Open() {
throw new NotImplementedException();
}
public virtual Stream Open(FileMode fileMode) {
throw new NotImplementedException();
}
protected CommonVirtualFile(string virtualPath) : base(virtualPath) { }
}
執行第二個Open方法是我的問題。如果我們看一下我的實現了本地文件系統,即節省了磁盤上的文件,它看起來像這樣:
public override Stream Open(FileMode fileMode) {
return new FileStream("The_Path_To_The_File_On_Disk"), fileMode);
}
如果我想保存在本地文件系統中的文件,這將是這個樣子:
const string virtualPath = "/assets/newFile.txt";
var file = HostingEnvironment.VirtualPathProvider.GetFile(virtualPath) as CommonVirtualFile;
if (file == null) {
var virtualDir = VirtualPathUtility.GetDirectory(virtualPath);
var directory = HostingEnvironment.VirtualPathProvider.GetDirectory(virtualDir) as CommonVirtualDirectory;
file = directory.CreateFile(VirtualPathUtility.GetFileName(virtualPath));
}
byte[] fileContent;
using (var fileStream = new FileStream(@"c:\temp\fileToCopy.txt", FileMode.Open, FileAccess.Read)) {
fileContent = new byte[fileStream.Length];
fileStream.Read(fileContent, 0, fileContent.Length);
}
// write the content to the local file system
using (Stream stream = file.Open(FileMode.Create)) {
stream.Write(fileContent, 0, fileContent.Length);
}
我想的是,如果我切換到我的Amazon S3的虛擬路徑提供我想要這個代碼直接沒有任何變化工作,以便總結的東西了,我怎麼能解決這個使用Amazon S3的SDK和如何應我在我的amazon s3虛擬路徑提供程序中實現我的Open(FileMode fileMode)方法?
您應該使用[SDK](http://aws.amazon.com/sdkfornet/)。 –
@AaronMcIver對不起,我的問題是模糊..我增加了更多的信息 – Marcus
我認爲你需要做的是做一個接口/工廠設計,適應各種雲存儲提供商的SDK實現。請檢查您是否侵犯了他們的任何專利,例如[David Ebbo的微軟專利](http://www.google.com/patents/US20060206452) - 您試圖做的事聽起來像是一項非常酷的技術開發!祝你好運!! –