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);
4

2 に答える 2

0

ArrayListはオブジェクトの配列であるためfile、ループで a にキャストしSystem.IO.Fileないと、これらのプロパティにアクセスできません。使用している.NETのバージョンについては言及していませんが、それがリモートで最近のものであると仮定すると、ジェネリックを使用ArrayListしてList<System.IO.File>.

于 2013-03-21T13:26:52.810 に答える
0

あなたのコードを見ると、ファイル アップロード コントロール全体を配列に追加していると推測できます。そうしないでください!

本当に取得する必要があるプロパティ (少なくとも、取得していることを示すもの) のみを配列に追加することで、コードを修正できます。これは、ファイル バイトです。

次のようにすることで、それを機能させることができました。

まず、コレクションの型を aList<byte[]>に変更しました。このコレクションは厳密に型指定されており、この場合に使用する方が適しています。

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

ファイルがポストされたら、FileBytes プロパティをリストに追加します。

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

ファイルの内容を取得するには、次の手順を実行します。

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

最後に、アップロードされたファイルを処理するために public static プロパティを使用することについて警告する必要があります。これを行うと、アプリケーション レベルで変数が作成されるため、リストは共有されるため、すべてのユーザーがそのリストを変更できます。何を達成しようとしているのかわかりませんが、これは非常に間違っているようです。

于 2013-03-21T13:48:09.960 に答える