Как я могу преобразовать загруженный XML-файл в форме HttpPostedFIle в строку в C # asp.net? - PullRequest
0 голосов
/ 03 апреля 2019

Как я могу преобразовать загруженный XML-файл в форме HttpPostedFIle в строку в C # asp.net?Я пытаюсь создать возможность загружать файл XML и сохранять его на сервере базы данных для клиента, использующего мое веб-приложение.Мне нужно преобразовать ее в строку, чтобы я мог выполнять манипуляции со строками в файле XML и удалять некоторые элементы в файле XML, которые не совместимы с сервером SQL.

Я пробовал это и несколько других вещей,Я продолжаю получать сообщение об ошибке

InputStream не в этом текущем контексте

и другую ошибку.

string xmlString = System.IO.File.ReadAllText(fl.InputStream.ToString());

            string fName = fl.FileName;
            if (fName.IndexOf("\\") != -1) { fName = fName.Substring(fName.LastIndexOf("\\") + 1); }
            string fileDataLink = uniqueName + Path.GetExtension(fName);
            outputPath += fileDataLink;
            fl.SaveAs(outputPath);
            transactionTypeID = Convert.ToInt32(Request["textInput"]);
            integrationTypeDt = DAC.ExecuteDataSetText(db.ConnectionString, "SELECT [StoredProcName], [Configuration] FROM [dbo].[ITransactionType] WITH(NOLOCK) WHERE [TransactionTypeID] =" + transactionTypeID, new string[] { "IntegrationType" }).Tables[0];

            string workbookXML = "";
            //load the file,
            string xmlString = System.IO.File.ReadAllText(fl.InputStream.ToString());

            //make changes

            //Assign the file to the XML var, 


            //and then save it into the database

Я ожидаю, что он вернет строковое значение всего файла, который был загружен.Вместо этого я получаю две ошибки.Один говорит, что InputStream не в текущем контексте.

1 Ответ

1 голос
/ 03 апреля 2019

Есть несколько способов исправить ваш код.Это может быть одним из способов:

        string fileDataLink = uniqueName + Path.GetExtension(fl.FileName);
        outputPath += fileDataLink;
        // not needed if you do not want the file on both disk and database 
        //fl.SaveAs(outputPath);

        transactionTypeID = Convert.ToInt32(Request["textInput"]);
        integrationTypeDt = DAC.ExecuteDataSetText(db.ConnectionString, "SELECT [StoredProcName], [Configuration] FROM [dbo].[ITransactionType] WITH(NOLOCK) WHERE [TransactionTypeID] =" + transactionTypeID, new string[] { "IntegrationType" }).Tables[0];

        string workbookXML = "";
        //load the file,
        string xmlString = null;
        using(var reader = new StreamReader(fl.InputStream))
        {
           xmlString = reader.ReadToEnd();
        }

Другим способом будет сохранить SaveAs и написать:

string xmlString = System.IO.File.ReadAllText(outputPath);

, который будет загружать файл с диска.

Обратите внимание на две вещи:

  1. Ваше решение загружает весь XML-файл в память для обработки.Это не может быть проблемой в вашем сценарии, но если у вас, например, много пользователей, и они загружают несколько больших файлов одновременно, вашему серверу может не хватить памяти.В таком случае было бы лучше попробовать другое решение, которое каким-то образом передает поток как поток в базу данных.
  2. Вы должны никогда объединять значение, которое вводится извеб-страницу к вашему sql, как это делается в инструкции "SELECT [StoredProcName], [Configuration] FROM [dbo].[ITransactionType] WITH(NOLOCK) WHERE [TransactionTypeID] =" + transactionTypeID Вместо вместо параметров .
...