Проблема с определением расширения файла при передаче от сервера клиенту - 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();
}