我之前有一个FileUpload控件,可以单独上传数据库中的每个文件。但现在我希望能够进行批量上传。
我的要求是csv文件包含文件名和文件路径,我需要使用FileUpload上传csv,并最终运行读取csv并将每个文件插入到表ApplicantAttachment中的代码。ApplicantAttachment具有列fileName (NVARCHAR)、FilePath(NVARCHAR)、Attachment (VARBINARY)。在此附件列中,我需要保存csv中提到的文件的二进制格式。我的CSV看起来像这个用户桌面dl-54a.pdf c:\ FileName \abc\ FilePath \dl-54a.pdf xyz.doc c:\users\abc\desktop\xyz.doc
我希望我能做这样的事情。但我知道我们无法将filename等传递给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();
                }
            }
        }
    }发布于 2012-04-26 00:25:48
这就是有效的方法。不能使用FileUpload。
     private void SaveFiles(List<string[]> files)
     {
        foreach (string[] attachment in files)
        {
            using (DataClasses1DataContext db = new DataClasses1DataContext())
            {
                string path = attachment[1].ToString();
                byte[] fileBytes = File.ReadAllBytes(path);
                ApplicantAttachment aa1 = new ApplicantAttachment();
                aa1.Filename = attachment[0].ToString();
                aa1.FileType = MIMEType.GetType(attachment[1].ToString());
                aa1.Attachment = fileBytes;
                db.ApplicantAttachments.InsertOnSubmit(aa1);
                db.SubmitChanges();
            }
        }
     }https://stackoverflow.com/questions/10301838
复制相似问题