Проблема с определением расширения файла при передаче от сервера клиенту - 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(); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д