2017-07-29 50 views
0

UI如何寫文件處理類圖書館項目運作

<input type = "file" title="Please upload some file" name="file" /> 

MVC

/*below method is called from a MVC controller 
this method resides for now in MVC project itself*/ 
public IEnumerable<CustomerTO> FetchJson(HttpPostedFile file) 
    { 
     using (StreamReader sr = new StreamReader(file.FileName)) 
     { 
      { 
       file.saveAs("details.txt"); 
       string json = sr.ReadToEnd(); 
       IEnumerable<CustomerTO> customers= 
        JsonConvert.DeserializeObject<List<CustomerTO>>(json); 
       return customers; 
      } 
     } 
    } 

當MVC項目上面的方法或某種基於Web的項目中所有的引用都是找的罰款。

但我想創建一個實用程序類來處理所有這些操作。 所以我創建&添加類Utitlity.cs

類庫

public IEnumerable<CustomerTO> FetchJson(HttpPostedFile file) 
    { 
     //but HttpPostedFile is throwing error. 
     //NOTE Ideally,I shouldn't be saving the posted file 
    } 

一個類庫項目現在我知道的FileUpload是UI控制HttpPostedFile處理與此相關的所有操作。

我可以很容易地添加引用using System.Web,但我懷疑這是對的嗎?

但是,如何解決我的需求,然後沒有任何形式的開銷? 內存分配,執行&所有這些是非常關鍵的

+0

不太確定如何聲明第一個作品 - 您的文件輸入沒有'name'屬性,因此參數將爲'null'。你又如何調用第二個「實用程序」方法 - 你的Controller中仍然需要一個操作方法來接收請求。 –

+0

@StephenMuecke,對不起!添加了缺少的細節 –

+0

它需要'name =「file」'綁定到一個參數'HttpPostedFile文件':) –

回答

1

一旦你確保控制器方法接收發布文件引用正確讀取這個答案。

您不需要在類庫中添加System.Web引用。而只是將文件內容傳遞給重構方法。此外,由於您正在製作實用課程,因此請確保它可以返回任何類型的DTO,而不僅僅是CustomerDTO。例如,您應該可以使用相同的類/方法,例如,如果您需要傳入帳戶文件並從中獲得AccountDTO

實際上,您應該能夠使用該代碼將任何字符串內容反序列化爲您想要的任何類型。你可以在這裏使用Generics。使用控制器StreamReader

// Controller.cs 
public IEnumerable<CustomerTO> FetchJson(HttpPostedFile file) 
{ 
    string fileContent; 
    using (StreamReader sr = new StreamReader(file.FileName)) { 
     file.saveAs("details.txt"); 
     fileContent = sr.ReadToEnd(); 
    } 

    var customers = JsonSerializer.Deserialize<List<CustomerTO>>(content); // Refactored 

    return customers; 
} 

// JsonSerializer.cs 
public static T Deserialize<T>(string content) { 
    // ... 
    return JsonConvert.DeserializeObject<T>(content); 
} 

讀取文件內容不需要進行重構。這是不必要的IMO。

+0

偉大的但正如我所說的保存文件是開銷 –

+0

當然,用戶上傳文件,需要閱讀的內容,反序列化和做一些操作(即返回到用戶界面)就是這樣,如果用戶上傳數百個文件保存很多文件沒有開銷 –

+0

如果你不想保存上傳文件的副本,那麼不要保存它,而應該使用'file.InputStream'。你也沒有提到在你的問題中多個文件上傳的可能性。確定你清楚地指出了有問題的實際情況。 – niksofteng