IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Chyba nahrátí jpg souboru přes ftp

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Martin
Člen
Avatar
Martin:25.12.2016 20:53

Ahojte,
prosím o radu ohledně nahrávání souborů přes ftp protokol. Na internetu jsem našel tento kód, který mě funguje u souborů css a html ale pokud přes něj nahraji obrázek jpg tak změní jeho velikost a i kódování si myslím. Mohl by mě někdo napsat co je tam zadáno špatně?

FtpWebRequest ftpRequestZnak = (FtpWebRequest)WebRequest.Create("ftp://rwd.webzdarma.cz/Znak.jpg");
ftpRequestZnak.Credentials = new NetworkCredential("rwd.webzdarma.cz", "XXXXXXX");
ftpRequestZnak.Method = WebRequestMethods.Ftp.UploadFile;

using (StreamReader sr = new StreamReader(@adresarCasomira + "//FTP//Znak.jpg"))
{
    fileContent = Encoding.UTF8.GetBytes(sr.ReadToEnd());

}

using (Stream sw = ftpRequestZnak.GetRequestStream())
{
    sw.Write(fileContent, 0, fileContent.Length);
}


ftpRequestZnak.GetResponse();

podle mě to vypadá na příkaz fileContent ale nevím co s ním, už je to nad mé vědomosti.

 
Odpovědět
25.12.2016 20:53
Avatar
Odpovídá na Martin
Radek Chalupa:26.12.2016 9:54

Problém bude v textovém kódování UTF8, v případě jpg dat to vyhodnotí nesmyslně a některé "dvojbyty" spojí -> změna velikosti. Takže asi nejlepší použít BinaryReader. Tohle je funkční kód, který jsem vyzkoušel a výsledek je v pořádku (http://www.radekchalupa.com/obr2.jpg).

FtpWebRequest fwr = (FtpWebRequest)WebRequest.Create("ftp://ftp.radekchalupa.com/www/obr2.jpg");
fwr.Method = WebRequestMethods.Ftp.UploadFile;
FileStream fs = new FileStream("d:\\test.jpg", FileMode.Open);
BinaryReader sr = new BinaryReader(fs);
byte[] buffer = (byte[])sr.ReadBytes((int)fs.Length);
fwr.ContentLength = buffer.Length;
sr.Close();
fs.Close();
fwr.Credentials = new NetworkCredential("username", "heslo");
Stream stream = fwr.GetRequestStream();
stream.Write(buffer, 0, (int)fwr.ContentLength);
stream.Close();
FtpWebResponse resp = (FtpWebResponse)fwr.GetResponse();
Console.WriteLine(resp.StatusDescription);
resp.Close();
Console.ReadLine();

Radek Chalupa

  • individuální konzultace, školení programování (C/C++, C#, WinAPI, .NET Framework, COM, ActiveX, ATL, MFC, ...)
  • vývoj software na zakázku

http://www.radekchalupa.cz

 
Nahoru Odpovědět
26.12.2016 9:54
Avatar
Martin
Člen
Avatar
Odpovídá na Radek Chalupa
Martin:26.12.2016 11:01

Děkuji za rychlou a přesnou odpověď. Už vše funguje jak má.

 
Nahoru Odpovědět
26.12.2016 11:01
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.