2011-02-14 14 views
5

Bir dosya yüklemeye çalışıyorum ve kaydetmek için servis katmanına gönderiyorum, ancak denetleyicinin HTTPPostedFileBase'i nasıl aldığına dair örnekler bulmaya devam ediyorum. kontrol ünitesi. Hizmet katmanımın web'de hiç bağımlılığı yok, dolayısıyla nesneyi bir bellek akışına/baytıma okumam gerekiyor mu? Bu konuda gitmeli nasıl Herhangi bir işaretçiler büyük ölçüde ... takdirbir dosya yükleyin ve servis katmanına gönderin, örneğin C# sınıf kitaplığı

Not: Dosyalar pdf tarafından, kelime yüzden de içerik türünü kontrol etmek gerekebilir olabilir (belki içinde alan-hizmet katmanı ...

Kodu:

public ActionResult UploadFile(string filename, HttpPostedFileBase thefile) 
{ 
//what do I do here...? 


} 

DÜZENLEME:

public interface ISomethingService  
{ 
    void AddFileToDisk(string loggedonuserid, int fileid, UploadedFile newupload);  
} 
    public class UploadedFile 
    { 
     public string Filename { get; set; } 
     public Stream TheFile { get; set; } 
     public string ContentType { get; set; } 
    } 

public class SomethingService : ISomethingService  
{ 
    public AddFileToDisk(string loggedonuserid, int fileid, UploadedFile newupload) 
    { 
    var path = @"c:\somewhere"; 
    //if image 
    Image _image = Image.FromStream(file); 
    _image.Save(path); 
    //not sure how to save files as this is something I am trying to find out... 
    } 
} 
+0

Hizmet katmanınızın nasıl göründüğünü bize anlatabilir misiniz? –

cevap

10

Sen yayınlanan fil InputStream özelliğini kullanabilirsiniz e bir bayt dizisi olarak içeriğini okumak ve servis katmanı gerekebilir böyle ContentType ve FileName gibi diğer bilgilerle birlikte servis katmanına göndermek:

public ActionResult UploadFile(string filename, HttpPostedFileBase thefile) 
{ 
    if (thefile != null && thefile.ContentLength > 0) 
    { 
     byte[] buffer = new byte[thefile.ContentLength]; 
     thefile.InputStream.Read(buffer, 0, buffer.Length); 
     _service.SomeMethod(buffer, thefile.ContentType, thefile.FileName); 
    } 
    ... 
} 
1

hizmet katmanda bir yöntem oluşturulamıyor Stream parametresini parametre olarak kabul etmek ve theFile.InputStream 'a geçmek mi? Akış, web ile ilgili herhangi bir bağımlılık gerektirmez ve verileri başka veri yapılarına kopyalamak için verileri kopyalayarak belleği çoğaltmaktan kaçınırsınız.

İlgili konular