Файл FileUpload очищается после загрузки с помощью ftp - PullRequest
1 голос
/ 26 января 2012

У меня проблемы с обработкой загруженного файла после того, как он был загружен с помощью ftp.

Файл, загружаемый пользователем, содержит xml. Я должен сохранить этот файл на диск, но я не могу записать этот файл непосредственно на диск, поэтому я использую ftp для его сохранения. После сохранения его необходимо обработать, чтобы сохранить его содержимое в базе данных. Сбой XmlReader с ошибкой «Корневой элемент не обнаружен». После некоторой отладки я пришел к выводу, что файл пуст.

Я попытался скопировать файл (где xsdUpload - это файл, загруженный пользователем):

FileUpload test = new FileUpload();
test = xsdUpload;

Но я не совсем уверен, копирует ли это файл в память.

Функция загрузки ftp выглядит следующим образом:

    public string uploadXsd(string fileName, FileUpload xsd)
    {
        FtpWebRequest request = (FtpWebRequest)WebRequest.Create(url + '/' + fileName);

        request.Method = WebRequestMethods.Ftp.UploadFile;

        request.Credentials = new NetworkCredential(username, password);

        StreamReader sourceStream = new StreamReader(xsd.FileContent);
        byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
        sourceStream.Close();
        request.ContentLength = fileContents.Length;

        Stream requestStream = request.GetRequestStream();
        requestStream.Write(fileContents, 0, fileContents.Length);
        requestStream.Close();

        FtpWebResponse response = (FtpWebResponse)request.GetResponse();

        response.Close();
        return url + '/' + fileName;
    }

Эта функция работает нормально. Я вижу файл в каталоге, где он должен быть.

Для обработки файла я использую:

 XmlReader reader = XmlReader.Create(xsdUploaded.FileContent);

 while (reader.Read())
 {
      if (reader.Name != "")
      {

У кого-нибудь есть решение?

1 Ответ

0 голосов
/ 27 января 2012

Кажется, что свойство FileContent является экземпляром класса Stream , и вы должны найти его в начале до второго чтения, т.е.

xsdUploaded.FileContent.Seek(0, SeekOrigin.Begin);
XmlReader reader = XmlReader.Create(xsdUploaded.FileContent);

Я не уверен, надеюсь, это поможет.

С уважением.

...