Gå til innhold

WebRequest + WebResponse: laste ned bilde uten direkte link


Anbefalte innlegg

Har knota litt med å laste ned et bilde og samtidig bevare det orginale filnavnet:

 

Eks

http://www.imagebam.com/image/f4b68d55288

 

Denne sida viser et html dokument med et bilde. Ved inspisering av html-koden finner jeg linken til bildet, ser slik ut:

http://1.imagebam.com/dl.php?ID=55288&sec=921e07bbe151455227ea5bee9241f10f

Må kopiere+lime link, ellers funker det ikke (referer sjekk?)

 

Paster du inn denne linken får du opp det orginale filnavnet (autoTraderAd.jpg). Spørsmålet er da, hvordan gjør jeg dette programatisk?

 

Har prøvd WebClient.DownloadFile(), men da må du spesifisere filnavn selv, noe jeg vil unngå å gjøre.

 

Her er det noen med nesten samme problemet, men de må fortsatt spesifisere filnavn selv:

http://channel9.msdn.com/ShowPost.aspx?PostID=227113

Lenke til kommentar
Videoannonse
Annonse

Takker :)

 

Edit:

 

private void Get()
	{
		System.Net.ServicePointManager.Expect100Continue = false;
		string url = "http://1.imagebam.com/dl.php?ID=55288";
		string post = "sec=921e07bbe151455227ea5bee9241f10f";
		HttpWebRequest wreq = (HttpWebRequest)HttpWebRequest.Create(url);
		wreq.Method = "POST";
		wreq.ContentType = "application/x-www-form-urlencoded" + Environment.NewLine;
		wreq.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)";
		wreq.ContentLength = post.Length;
		try
		{
			StreamWriter sw = new StreamWriter(wreq.GetRequestStream());
			sw.Write(post);
			sw.Close();

			HttpWebResponse wres = (HttpWebResponse)wreq.GetResponse();
			Stream imagestream = wres.GetResponseStream();

			string filename = wres.GetResponseHeader("content-disposition").Replace("\"", "").Split("=".ToCharArray())[1];
			string length = wres.Headers.GetValues("content-length")[0];

			label_filename.Text = filename;
			label_length.Text = length + " bytes";

			string path = Path.Combine(@"C:\", filename);

			FileStream writeStream = new FileStream(path, FileMode.Create, FileAccess.Write);
			ReadWriteStream(imagestream, writeStream);

			pictureBox_myImage.Image = Image.FromFile(path);
			wres.Close();
		}
		catch (Exception ex)
		{
			MessageBox.Show(ex.Message);
		}
	}

Endret av xtc
Lenke til kommentar

Hvorfor kan du ikke bruke WebClient??

 

using (WebClient wc = new WebClient())
{
HttpWebResponse wreq =  wc.ResponseHeaders[ ....
}

...for å få filnavnet, og så bruke wc.DownloadFile() for å laste ned filen.

 

HttpWebResponse og HttpWebRequest er litt .net 1.1 eller compact-opplegg...

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...