以前、データベースに各ファイルを個別にアップロードするためのFileUploadコントロールがありました。でも今は一括アップロードができるようになりたいです。
私の要件は、csvファイルにファイル名とファイルパスが含まれていることです。FileUploadを使用してcsvをアップロードし、最終的にcsvを読み取り、各ファイルをテーブルApplicantAttachmentに挿入するコードを実行する必要があります。ApplicantAttachmentには、fileName(NVARCHAR)、FilePath(NVARCHAR)、Attachment(VARBINARY)の列があります。この添付ファイルの列には、csvに記載されているファイルのバイナリ形式を保存する必要があります。私のCSVは次のようになりますFileNameFilePathdl-54a.pdf c:\ users \ abc \ desktop \ dl-54a.pdf xyz.doc c:\ users \ abc \ desktop \ xyz.doc
このようなことができたらいいのにと思います。しかし、Fileuploadオブジェクトにファイル名などを割り当てることはできません。どんな提案も役に立ちます。
<asp:FileUpload ID="csvFile" runat="server" Width="400" /></td>
<asp:Button ID="btnUpload" Text="Upload" runat="server" OnClick="btnUpload_Click" /></td>
protected void btnUpload_Click(object sender, EventArgs e)
{
if (csvFile.HasFile)
{
List<string[]> filesToUpload = parseCSV(csvFile.PostedFile.FileName);
SaveFiles(filesToUpload);
}
}
public List<string[]> parseCSV(string path)
{
List<string[]> parsedData = new List<string[]>();
try
{
using (StreamReader readFile = new StreamReader(path))
{
string line;
string[] row;
while ((line = readFile.ReadLine()) != null)
{
if (!readFile.ReadLine().Contains("ApplicantId"))
{
row = line.Split(',');
parsedData.Add(row);
}
}
}
}
catch (Exception e)
{
;
}
return parsedData;
}
private void SaveFiles(List<string[]> files)
{
foreach (string[] attachment in files)
{
using (DataClasses1DataContext db = new DataClasses1DataContext())
{
FileUpload fu = new FileUpload();
fu.FileName = attachment[1].ToString();
if (fu.HasFile)
{
ApplicantAttachment aa1 = new ApplicantAttachment();
aa1.Filename = attachment[0].ToString();
aa1.FileType = fu.PostedFile.ContentType;
aa1.Attachment = fu.FileBytes;
db.ApplicantAttachments.InsertOnSubmit(aa1);
db.SubmitChanges();
}
}
}
}