Lo sfondo di questa domanda è basato su un file system virtuale che sto sviluppando. Il concetto che sto usando è quello dei provider di percorsi virali per diversi tipi di storage: il file system locale, dropbox e amazon s3. La mia classe di base per un file virtuale è simile al seguente:Carica file utilizzando un provider di percorsi virtuali e 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) { }
}
L'attuazione del secondo metodo Open è ciò che la mia domanda è tutto. Se guardiamo alla mia implementazione per il file system locale ovvero il salvataggio di un file su disco che appare così:
public override Stream Open(FileMode fileMode) {
return new FileStream("The_Path_To_The_File_On_Disk"), fileMode);
}
Se mi piacerebbe salvare un file sul file system locale questo sarebbe simile a questa:
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);
}
quello che voglio è che se posso passare al provider di percorso virtuale il mio Amazon S3 voglio questo codice di lavorare direttamente senza alcuna modifica per così riassumere le cose, come posso risolvere questo utilizzando l'SDK Amazon S3 e come dovrebbe implemento il mio metodo Open (FileMode fileMode) nel mio provider di percorsi virtuali amazon s3?
È necessario utilizzare [SDK] (http://aws.amazon.com/sdkfornet/). –
@AaronMcIver Scusa, la mia domanda è stata confusa .. Ho aggiunto più informazioni – Marcus
Penso che quello che devi fare è creare un'interfaccia/progetto di fabbrica che soddisfi le varie implementazioni di SDK del provider di archiviazione cloud. Verifica che non stai violando nessuno dei loro Brevetti, ad esempio [Brevetti Microsoft di David Ebbo] (http://www.google.com/patents/US20060206452) - quello che stai cercando di fare sembra uno sviluppo tecnologico piuttosto interessante! In bocca al lupo!! –