Перебрать несколько файлов во временном каталоге и вставить файлы в базу данных MS SQL с существующими строками / идентификаторами - PullRequest
1 голос
/ 06 марта 2019

У меня есть база данных SQL с существующими строками и идентификаторами вложений. У меня есть папка из нескольких тысяч файлов PDF, которые нужно вставить в эту базу данных. Файлы должны быть вставлены в каждую строку на основе имени файла / столбца. Пример. Один файл называется 123.pdf, который должен быть вставлен в строку с идентификатором 123. Я создал приложение веб-форм Asp.net, используя инструмент загрузки файлов Ajax. Он отлично работает, если я использую настоящий каталог. Как я могу сделать это с временным каталогом?

protected void AjaxFileUpload1_UploadComplete(object sender, AjaxControlToolkit.AjaxFileUploadEventArgs e)
    {
        try
        {
            string filePath = e.FileName;
            string filename = Path.GetFileName(filePath);
            string ext = Path.GetExtension(filename);
            string contenttype = String.Empty;
            switch (ext)
            {
                case ".pdf":
                    contenttype = "application/pdf";
                    break;
            }
            if (contenttype != String.Empty)
            {

                string tempPath = System.IO.Path.GetTempFileName();
                AjaxFileUpload1.SaveAs(tempPath);
                using (FileStream fs = File.OpenRead(tempPath))
                {

                    BinaryReader br = new BinaryReader(fs);
                    Byte[] bytes = br.ReadBytes((Int32)fs.Length);

        //How do I create a temp directory of the files in the AjaxFileUploader?
                    var dir = new DirectoryInfo(CreateTempDirectoryHere);
                    FileInfo[] pdfFiles = dir.GetFiles();
                    foreach (FileInfo pdfFile in pdfFiles)
                    {
                        var attachmentID = Path.GetFileNameWithoutExtension(pdfFile.ToString());

                        string constr = ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString;
                        using (SqlConnection con = new SqlConnection(constr))

                        {
                            SqlCommand cmd = new SqlCommand("dbo.spUploadContentBulk", con);
                            cmd.Parameters.AddWithValue("@AttachmentID", attachmentID);
                            cmd.CommandType = CommandType.StoredProcedure;

                            cmd.Parameters.Add(new SqlParameter()
                            {
                                ParameterName = "@FileName",
                                Value = filename
                            });
                            cmd.Parameters.Add(new SqlParameter()
                            {
                                ParameterName = "@FileContent",
                                Value = bytes
                            });
                            cmd.Parameters.Add(new SqlParameter()
                            {
                                ParameterName = "@FileType",
                                Value = contenttype
                            });

                            con.Open();
                            cmd.ExecuteNonQuery();
                            con.Close();
                        }
                    }
                }
                File.Delete(tempPath);
            }
        }
        catch (Exception ex)
        {

            txtError.Text = ex.ToString();
        }

    }

1 Ответ

0 голосов
/ 06 марта 2019

Я имею в виду что-то вроде этого (даже не используйте временную папку):

protected void AjaxFileUpload1_UploadComplete(object sender, AjaxControlToolkit.AjaxFileUploadEventArgs e)
{
    try
    {
        string filename = e.FileName;
        var bytes = e.GetContents();
        var attachmentID = Path.GetFileNameWithoutExtension(fileName);
        string ext = Path.GetExtension(filename);
        string contenttype = String.Empty;
        switch (ext)
        {
            case ".pdf":
                contenttype = "application/pdf";
                break;
        }
        if (contenttype != String.Empty)
        {
            string constr = ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString;
            using (SqlConnection con = new SqlConnection(constr))
            {
                SqlCommand cmd = new SqlCommand("dbo.spUploadContentBulk", con);
                cmd.Parameters.AddWithValue("@AttachmentID", attachmentID);
                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.Add(new SqlParameter()
                {
                    ParameterName = "@FileName",
                    Value = filename
                });
                cmd.Parameters.Add(new SqlParameter()
                {
                    ParameterName = "@FileContent",
                    Value = bytes
                });
                cmd.Parameters.Add(new SqlParameter()
                {
                    ParameterName = "@FileType",
                    Value = contenttype
                });

                con.Open();
                cmd.ExecuteNonQuery();
                con.Close();
            }
        }
    }
    catch (Exception ex)
    {

        txtError.Text = ex.ToString();
    }

}
...