Der Hintergrund dieser Frage basiert auf einem virtuellen Dateisystem, das ich entwickle. Das Konzept, das ich verwende, ist ein virtueller Pfad-Provider für verschiedene Arten von Speichertypen, d. H. Lokales Dateisystem, Dropbox und Amazon S3. Meine Basisklasse für eine virtuelle Datei sieht wie folgt aus:Upload-Datei mit einem virtuellen Pfadanbieter und 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) { }
}
Die Umsetzung der zweiten Open-Methode ist es, was meine Frage dreht sich alles um. Wenn wir bei meiner Implementierung für das lokale Dateisystem suchen, dh eine Datei auf Festplatte speichern sieht es wie folgt aus:
public override Stream Open(FileMode fileMode) {
return new FileStream("The_Path_To_The_File_On_Disk"), fileMode);
}
Wenn ich möchte eine Datei auf dem lokalen Dateisystem speichern diese in etwa so aussehen würde:
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);
}
Was ich will, ist, dass, wenn ich meinen amazon s3 virtuellen Pfad Anbieter wechsle ich diesen Code wollen so ohne Änderungen direkt zu arbeiten, die Dinge zusammenzufassen, wie kann ich dies die sdk amazon S3 mit lösen und wie Ich implementiere meine Open (FileMode fileMode) -Methode in meinem Amazon s3 Virtual Path Provider?
Sie sollten das [SDK] (http://aws.amazon.com/sdkfornet/) verwenden. –
@AaronMcIver Entschuldigung, meine Frage war zu unscharf .. Ich habe weitere Informationen hinzugefügt – Marcus
Ich denke, was Sie tun müssen, ist ein Interface/Factory-Design, das die verschiedenen SDK-Implementierungen des Cloud Storage Providers berücksichtigt. Stellen Sie sicher, dass Sie keine Patente verletzen, zB [David Ebbos Microsoft-Patente] (http://www.google.com/patents/US20060206452) - was Sie versuchen zu tun, klingt nach einer ziemlich coolen Technologieentwicklung! Viel Glück!! –