Проблема с определением расширения файла при передаче от сервера клиенту - C#

Узнай цену своей работы

Формулировка задачи:

приложение для передачи файла от сервера клиенту. сначала передает информацию о файле, а потом сам файл. во время передачи информации о файле определяется расширение (последние 4 символа принимаются за расширение) Помогите исправить так, что бы расширение определялось по-нормальному, а не так криво как сейчас
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Xml.Serialization;
using System.Diagnostics;
using System.Threading;
 
namespace File_Server
{
    public class Program
    {
        [Serializable]//Преобразование объекта в поток данны для его хранения или передачи в файл,память или БД
        public class File
        {
            public string file_type = "";//Тип файла
            public long file_size = 0;//Размер
        }
 
        private static File FileDet = new File();//Экземпляр класса File
        private static IPAddress remoteIPAddress;//Получаем IP
        private const int remotePort = 5002;//Назначаем порт
        private static UdpClient sender = new UdpClient();//Обеспечиваем сетевые службы проотоколом UDP
        private static IPEndPoint endPoint;//Сетевая конечная точка(IP , Порт)
        private static FileStream fs;
        [STAThread]//У приложение только один поток выполнения.(STA - single threading model)
        static void Main(string[] args)// этом методе вводим удаленный IP-адрес, по которому нужно отправить файл, путь и имя отправляемого файла. 
            //Открываем этот файл в объекте FileStream и определяем его длину.
        {
            try
            {
                Console.WriteLine("Введите удаленный IP-адрес");
                remoteIPAddress = IPAddress.Parse(Console.ReadLine().ToString());
                endPoint = new IPEndPoint(remoteIPAddress, remotePort);// Получаем удаленный IP-адрес и создаем IPEndPoint
                Console.WriteLine("Введите путь к файлу и его имя");// Получаем путь файла и его размер (должен быть меньше 8kb)
                fs = new FileStream(@Console.ReadLine().ToString(), FileMode.Open, FileAccess.Read);
                if (fs.Length > 12192)
                {
                    Console.Write("Файл должен весить меньше 8кБ");
                    sender.Close();//Закрываем UDP-подключение
                    fs.Close();//Закрываем поток и освобождаем все ресурсы
                    return;
                }
                SendFileInfo();// Отправляем информацию о файле
                Thread.Sleep(2000);// Ждем 2 секунды
                SendFile();// Отправляем сам файл
                Console.ReadLine();
            }
            catch (Exception eR)
            {
                Console.WriteLine(eR.ToString());
            }
        }
        public static void SendFileInfo()//заполняет поля объекта FileDetails, а затем сериализует объект в MemoryStream. 
            //Этот объект считывается в массив байтов и передается методу Send() класса UdpClient, который отправляет информацию о файле клиенту.
        {
            //select Path.GetExtension(file.FullName);
            FileDet.file_type = fs.Name.Substring((int)fs.Name.Length - 4, 4);// Получаем тип и расширение файла
            FileDet.file_size = fs.Length;// Получаем длину файла
            XmlSerializer fileSerializer = new XmlSerializer(typeof(File));//сериализуем обьект в memorystream, используя xmlserializer
            MemoryStream stream = new MemoryStream();
            fileSerializer.Serialize(stream, FileDet);// Сериализуем объект
            stream.Position = 0;
            Byte[] bytes = new Byte[stream.Length];
            stream.Read(bytes, 0, Convert.ToInt32(stream.Length));// Считываем поток в байты
            Console.WriteLine("Отправка деталей файла...");
            sender.Send(bytes, bytes.Length, endPoint);// Отправляем информацию о файле
            stream.Close();
 
        }
        private static void SendFile()//sendfile просто считывает содержимое файла из filestream в массив байтов и отправляет клиенту
        {
            Byte[] bytes = new Byte[fs.Length];
            fs.Read(bytes, 0, bytes.Length);
            Console.WriteLine("Отправка файла размером " + fs.Length + " байт");
            try
            {
                sender.Send(bytes, bytes.Length, endPoint);// Отправляем файл
            }
            catch (Exception eR)
            {
                Console.WriteLine(eR.ToString());
            }
            finally
            {
                // Закрываем соединение и очищаем поток
                fs.Close();
                sender.Close();
            }
            Console.WriteLine("Файл успешно отправлен.");
            Console.Read();
        }
    }
}

Решение задачи: «Проблема с определением расширения файла при передаче от сервера клиенту»

textual
Листинг программы
 [HttpPost]
        public ActionResult Upload(HttpPostedFileBase file)
        {
            // Получаем расширение
            string ext = file.FileName.Substring(file.FileName.LastIndexOf('.'));
            // сохраняем файл по определенному пути
            file.SaveAs("C:\\avatar." + ext);
            return View();
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.429 из 5
Похожие ответы