2013-03-21 91 views
0

我將上傳的文件保存在數組中,並且也顯示在網格視圖中。現在我在獲取文件名,文件大小,文件類型,文件數據(二進制)等數值時遇到問題。在定義數組並添加上傳文件之後,我嘗試使用下面的代碼,但它不顯示文件變量的屬性。 例如我喜歡用下面的代碼獲取上傳文件(prjd.Data = file.FileBytes; )的二進制數據,但它不起作用。如何從數組中獲取文件上傳屬性

public static ArrayList Files = new ArrayList(); 
foreach (var file in Files) 
{ 


    ProjDocAttach prjd = new ProjDocAttach(); 
    prjd.ProjDocID = _Projectid; 

    prjd.Data = file.FileBytes; 

    _DataContext.ProjDocAttaches.InsertOnSubmit(prjd); 
    _DataContext.SubmitChanges(); 
} 

添加到文件陣列的代碼另一部分:

dt = new DataTable(); 

DataColumn dc1 = new DataColumn("File Name", typeof(string)); 

DataColumn dc2 = new DataColumn("File Size", typeof(string)); 

DataColumn dc3 = new DataColumn("Content Type", typeof(string)); 


dt.Columns.Add(dc1); 

dt.Columns.Add(dc2); 
dt.Columns.Add(dc3); 

dr = dt.NewRow(); 

dr["File Name"] = FileName; 

if (size > 0) 
    dr["File Size"] = size.ToString() + " KB"; 
else 
{ dr["File Size"] = fileObj.Length.ToString() + " Bytes"; } 

dr["Content Type"] = contenttype; 
// dr["Bytes"] = bytes; 
// var x = bytes; 
// var y = dr["Bytes"]; 
dt.Rows.Add(dr); 
GridViewEfile.DataSource = dt; 
GridViewEfile.DataBind(); 
Files.Add(FileUpload1); 
+0

您是否將整個'FileUpload'控件添加到數組? Files.Add(FileUpload1);在你發佈的代碼片段中,是否只有你需要文件字節的屬性? – MarcusVinicius 2013-03-21 13:25:58

回答

0

通過查看您的代碼,我可以推斷出您將整個文件上載控件添加到數組中。不要這樣做!

通過向數組中添加您真正需要檢索的屬性(至少您向我們顯示的是正在檢索的內容),即文件字節,您可以修復代碼。

我可以使它工作,通過執行以下操作:

首先,我已經改變了集合類型爲List<byte[]>,這個系列是強類型,是更好地在這種情況下使用:

public static List<byte[]> files = new List<byte[]>(); 

當文件被髮布時,FileBytes屬性添加到列表,該列表:

// FileUpload1 is the File Upload control declared at the aspx 
files.Add(FileUpload1.FileBytes); 

檢索文件的內容,執行FOLL由於:

foreach (byte[] bytes in files) 
{ 
    ProjDocAttach prjd = new ProjDocAttach(); 
    prjd.ProjDocID = _Projectid; 
    prjd.Data = bytes; 
    // Save to database 
} 

最後,我不得不警告你使用公共靜態屬性來處理上傳的文件。當你這樣做時,你正在應用層創建一個變量,所以所有的用戶都可以修改那個列表,因爲它是共享的。我不知道你想完成什麼,但這似乎是非常錯誤的。

+0

如果我還想要文件名和輸入我必須做的事,我必須使用3個foreach? – masoud 2013-03-21 14:26:37

+0

不,在這種情況下,我建議你創建一個類來保存你的數據,具有byte [] FileBytes,'string Name'和'FileType'屬性。然後,將''列爲'List ',其中MyClass是您創建的類。所以,在每一次迭代中,你將擁有全部三個屬性。 – MarcusVinicius 2013-03-21 14:34:43

+0

謝謝我使用清單並在20天后爲我工作,我不知道如何保持這些屬性。 – masoud 2013-03-25 18:17:35

0

ArrayList是對象的數組,所以沒有在你的循環鑄造fileSystem.IO.File您將無法訪問這些屬性。你沒有提到你使用的是哪個版本的.NET,但假設它是最近的東西,那麼我會推薦使用泛型,用List<System.IO.File>代替ArrayList