Font
[thread]8275[/thread]

Fehler im encoding?: Download -> korrupte Datei

Reader: 1


<< >> 3 entries, 1 page
guest Gast
 2006-08-28 14:18
#69300 #69300
Hallo zusammen! Ich hoffe ich habe hier den richtigen Forenteil getroffen.

Folgendes Problem habe ich:
Ein Teil eines Programms welches ich gerade schreibe soll beliebige Datein aus dem Internet anhand einer URL herunterladen und lokal hinterlegen. Dafür habe ich folgenden Code geschrieben (gekürzte Fassung):
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/usr/local/bin/perl -w
use strict;
use warnings;
use LWP::UserAgent;

sub download {
my $as_target=shift;
my $ref=shift;
my $l_agent=LWP::UserAgent->new('max_redirect'=>0);
my $l_response=$l_agent->get($as_target);
if ($l_response->is_success) {
$$ref=$l_response->content;
return 1;
}
else {
$$ref=$l_response->status_line;
return 0;
}
}

my $url=<STDIN>;
chomp $url;
my $data;
download($url,\$data);
my $pos=rindex($data,"/");
my $dateiname=substr($l_zieldatei,$pos+1);
open (STREAM,">$dateiname");
print STREAM $data;
close STREAM;


Das ganze funktioniert soweit ganz gut, solange es sich um Textdatein handelt. Komme ich jedoch zu pdf's oder jpg's (bisher nur damit probiert) sind die Datein unter Windows korrupt. Unter Linux kann ich noch alles anzeigen lassen, jedoch scheint da auch nicht alles 100%ig zu stimmen.

Ich vermute, das es irgendwas mit dem Encoding der Daten zu tun hat, da ich davon aber kaum Ahnung habe, wäre es nett wenn ihr mir evtl helfen könntet.
renee
 2006-08-28 14:25
#69301 #69301
User since
2003-08-04
14371 articles
ModeratorIn
[Homepage] [default_avatar]
Du solltest aus
Code: (dl )
1
2
3
open (STREAM,">$dateiname");
print STREAM $data;
close STREAM;


das hier machen:
Code: (dl )
1
2
3
4
open (STREAM,">$dateiname") or die $!;
binmode STREAM;
print STREAM $data;
close STREAM;


JPGs und PDFs sind Binärformate...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Linuxer
 2006-08-29 12:15
#69302 #69302
User since
2006-01-27
3783 articles
HausmeisterIn

user image
Hi,

wenn Du es sowieso in eine Datei schreiben willst, warum nutzt Du dann nicht getstore() des LWP::Simple?

Quote
getstore($url, $file)

Gets a document identified by a URL and stores it in the file. The return value is the HTTP response code.


Damit kannst Du Dir die Sorge um die richtige Art und Weise des Speicherns sparen...
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
<< >> 3 entries, 1 page



View all threads created 2006-08-28 14:18.