[C#] Nahrávání souboru na server – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

[C#] Nahrávání souboru na server – .NET – Fórum – Programujte.com[C#] Nahrávání souboru na server – .NET – Fórum – Programujte.com

 

HoHo0
Newbie
18. 10. 2009   #1
-
0
-

Ahoj,
mám takový problém: nahrávám fotky z lokálního počítače na server, kde jsou uloženy webovky. Pokud pustím tento kód:



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;

namespace Pokus_nahravani
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
Application.Exit();
}

private void Form1_Load(object sender, EventArgs e)
{
FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create("ftp://www.zs-dukelska.strakonice.eu/nahravani/pokus.jpg");

request.Method = WebRequestMethods.Ftp.UploadFile;
request.Credentials = new NetworkCredential("uz_jmeno", "heslo");
request.UsePassive = true;
request.UseBinary = true;
request.KeepAlive = false;

request.Proxy = null;

FileStream stream = File.OpenRead(@"C:\pokus.jpg");
byte[] buffer = new byte[stream.Length];

stream.Read(buffer, 0, buffer.Length);
stream.Close();


Stream reqStream = request.GetRequestStream();
reqStream.Write(buffer, 0, buffer.Length);
reqStream.Close();
}
}
}

nahraje se vše správně a program skončí, aniž by vyhodil nějakou chybu.

Pokud ale pustím tento kód:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;

namespace Nahravani_fotek
{
public partial class Form1 : Form
{
string domena = "http://www.zs-dukelska.strakonice.eu/nahravani/";
bool nahraj = false;
string[] delete = new string[1000];
string[] nazvy = new string[1000];
int poradi = 0;
string zkratka2 = "";
string nazev;
Bitmap obr;
string pripona;
string slozka;
string adresa;
int pozice;
string zkratka;

public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
/*prohlizec.Navigate(domena + "dostupne.php");*/
nahraj_server(@"C:\pokus.jpg", "pokus.jpg");
}

private void timer1_Tick(object sender, EventArgs e)
{
timer1.Enabled = false;
nahraj_fotky();
}

private void nahraj_fotky()
{
poradi = 0;

adresa = prohlizec.Url.ToString();
pozice = 2;
for (int i = adresa.Length - 1; i >= 0; i--)
{
if (adresa.Substring(i, 1) == "=")
pozice = i;
}
zkratka = adresa.Substring(pozice + 1, adresa.Length - 1 - pozice);
zkratka2 = zkratka;

DialogResult dlg = openFileDialog1.ShowDialog();
if (dlg != DialogResult.Cancel)
{
prohlizec.Navigate(domena + "nahravam.php");

nazev = openFileDialog1.FileName;
slozka = System.IO.Path.GetDirectoryName(nazev);

timer3.Enabled = true;
}
else
nahraj_fotky();
}

private void zmensi(Bitmap obr, int maxw, int maxh, string kam)
{
int w = 800;
int h = 600;
if (obr.Width > maxw || obr.Height > maxh)
{
float k = 1;

if (obr.Width > maxw)
{
k = Convert.ToSingle(obr.Width) / Convert.ToSingle(maxw);
w = maxw;
h = Convert.ToInt32(Convert.ToSingle(obr.Height) / k);
}

if (h > maxh || k == 1)
{
k = Convert.ToSingle(obr.Height) / Convert.ToSingle(maxh);
w = Convert.ToInt32(Convert.ToSingle(obr.Width) / k);
h = maxh;
}

}
else
{
w = obr.Width;
h = obr.Height;
}

Bitmap obr2 = new Bitmap(w, h);
Graphics g = Graphics.FromImage(obr2);
g.DrawImage(obr, 0, 0, w, h);
g.Dispose();

/*obr2.Save(@"C:\www\dukelka5\nahravani\" + zkratka + @"\" + System.IO.Path.GetFileName(nazev2), System.Drawing.Imaging.ImageFormat.Jpeg);*/
/*obr2.Save(slozka + @"\" + zkratka + System.IO.Path.GetFileName(nazev2), System.Drawing.Imaging.ImageFormat.Jpeg);*/
obr2.Save(kam, System.Drawing.Imaging.ImageFormat.Jpeg);
}

private void nahraj_fotku(int jakafot)
{
int pokusu = 0;

try
{
pokusu++;
/*Client.UploadFile(@"/nahravani/" + zkratka2 + @"\" + nazvy[jakafot], delete[jakafot]);*/
nahraj_server(delete[jakafot], zkratka2 + @"\" + nazvy[jakafot]);
}
catch
{
if (pokusu <= 5)
nahraj_fotku(jakafot);
return;
}
}

private void prohlizec_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
string adresa = prohlizec.Url.ToString();
string dok = domena + "nahrani.php";

if (adresa.Substring(0, dok.Length) == dok)
{
nahraj = true;
timer1.Enabled = true;
}
}

private void timer2_Tick(object sender, EventArgs e)
{
bool vsechny = true;

for (int i = 0; i < poradi; i++)
{
if (File.Exists(delete[i]))
{
vsechny = false;
File.Delete(delete[i]);
}

}

if (vsechny)
{
timer2.Enabled = false;
prohlizec.Navigate(domena + "uloz.php");
}
}

private void timer3_Tick(object sender, EventArgs e)
{
timer3.Enabled = false;

foreach (string nazev2 in System.IO.Directory.GetFiles(slozka))
{
try
{
pripona = System.IO.Path.GetExtension(nazev2);

if (pripona.ToLower() == ".jpg" ||
pripona.ToLower() == ".jpeg" ||
pripona.ToLower() == ".png")
{
obr = (Bitmap)Bitmap.FromFile(nazev2);
int velikost = 0;
string cesta = slozka + @"\" + zkratka + System.IO.Path.GetFileName(nazev2);
int prubeh = 0;

do
{
zmensi(obr, 800 - prubeh * 25, 600 - prubeh * 25, cesta);
velikost = Convert.ToInt32(new FileInfo(cesta).Length);

prubeh++;
} while (velikost > 1024 * 500);

delete[poradi] = slozka + @"\" + zkratka + System.IO.Path.GetFileName(nazev2);
nazvy[poradi] = System.IO.Path.GetFileName(nazev2);
poradi++;
}
}
catch
{

}
}

for (int i = 0; i < poradi; i++)
{
nahraj_fotku(i);
}

timer2.Enabled = true;
}

private void nahraj_server(string soubor, string budnazev)
{
FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create("ftp://www.zs-dukelska.strakonice.eu/nahravani/" + budnazev);

request.Method = WebRequestMethods.Ftp.UploadFile;
request.Credentials = new NetworkCredential("uz_jmeno", "heslo");
request.UsePassive = true;
request.UseBinary = true;
request.KeepAlive = false;

request.Proxy = null;

FileStream stream = File.OpenRead(soubor);
byte[] buffer = new byte[stream.Length];

stream.Read(buffer, 0, buffer.Length);
stream.Close();


Stream reqStream = request.GetRequestStream();
reqStream.Write(buffer, 0, buffer.Length);
reqStream.Close();
}
}
}

tak to vyhodí chybu na tomto řádku:


Stream reqStream = request.GetRequestStream();

Vyhodí to chybu, že se stala při nahrávání neočekávaná chyba.

Nutno podotknout, že mi z domova jdou oba programy, ale ze školy, pro kterou to dělám, mi jde jen ten první.

Už se s tím trápím docela dlouho, tak budu hrozně vděčnej, když na to někdo z vás přijde. Předem velké díky....:)

Pro pořádek ještě přidávám Designer pro druhý program:


namespace Nahravani_fotek
{
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;

/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}

#region Windows Form Designer generated code

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.prohlizec = new System.Windows.Forms.WebBrowser();
this.timer1 = new System.Windows.Forms.Timer(this.components);
this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
this.timer2 = new System.Windows.Forms.Timer(this.components);
this.timer3 = new System.Windows.Forms.Timer(this.components);
this.SuspendLayout();
//
// prohlizec
//
this.prohlizec.Dock = System.Windows.Forms.DockStyle.Fill;
this.prohlizec.Location = new System.Drawing.Point(0, 0);
this.prohlizec.MinimumSize = new System.Drawing.Size(20, 20);
this.prohlizec.Name = "prohlizec";
this.prohlizec.Size = new System.Drawing.Size(912, 435);
this.prohlizec.TabIndex = 0;
this.prohlizec.DocumentCompleted += new System.Windows.Forms.WebBrowserDocumentCompletedEventHandler(this.prohlizec_DocumentCompleted);
//
// timer1
//
this.timer1.Interval = 2000;
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
//
// openFileDialog1
//
this.openFileDialog1.FileName = "openFileDialog1";
//
// timer2
//
this.timer2.Interval = 10000;
this.timer2.Tick += new System.EventHandler(this.timer2_Tick);
//
// timer3
//
this.timer3.Interval = 500;
this.timer3.Tick += new System.EventHandler(this.timer3_Tick);
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.ClientSize = new System.Drawing.Size(912, 435);
this.Controls.Add(this.prohlizec);
this.MaximizeBox = false;
this.Name = "Form1";
this.Text = "Nahrávání fotek";
this.Load += new System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);

}

#endregion

private System.Windows.Forms.WebBrowser prohlizec;
private System.Windows.Forms.Timer timer1;
private System.Windows.Forms.OpenFileDialog openFileDialog1;
private System.Windows.Forms.Timer timer2;
private System.Windows.Forms.Timer timer3;
}
}

Nahlásit jako SPAM
IP: 90.176.243.–
http://hoblog.ic.cz
Petr
~ Anonymní uživatel
746 příspěvků
23. 11. 2009   #2
-
0
-

Ahoj,

nejspis bude chyba nekde v komunikaci Tveho klienta se serverem. Zkus pouzit nejaky packet sniffer (napr. EtheReal), abys prozkoumal komunikaci doma a ve skole a nasledne ji porovnal. Mozna je ve skole nejaky router nebo proxy, ktery do te komunikace zasahuje.

Nahlásit jako SPAM
IP: 90.178.175.–
mnn
~ Anonymní uživatel
118 příspěvků
23. 11. 2009   #3
-
0
-

1. urcite to bude firewall
2. nie je to Ethereal ale Wireshark

Nahlásit jako SPAM
IP: 78.98.235.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 13 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý