Bonjour!
Le type LongBlob de Mysql permet de sauvegarder des fichiers de tres grandes tailles.
J'aimerais pouvoir ecrire puis lire ce genrs de données via le module DBI.
Soit la table t2(longblob data2) ( ): voila donc un premier jet pour récuperer ces fameux fichiers:
Ces scripts s'executent sans anicroches mais le fichier test récupéré à la fin ne fait (evidement?) que 64KB alors que l'image jpg en faisait 90.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 #script d'insertion: #!/usr/bin/perl -w use strict; use DBI; ########################## READ BINARY FILE ##################################### my $image = "image.jpg"; open(IMG, $image) or die "can't open $image: $!"; binmode(IMG); # now DOS won't mangle binary input from GIF my $buff; my $content; while (read(IMG, $buff, 8 * 2**10)) { $content.=$buff; } close(IMG); ########################## SQL TRANSACTION ######################################### my $source ="dbi:mysql:dbname=database02;host=localhost"; my $user = "root"; my $passwd = ""; my $base =DBI->connect($source,$user,$passwd); my $sql = "INSERT INTO t2 (data2) VALUES (".$base->quote($content).")"; my $req=$base->prepare($sql) or die($base->errstr()); $req->execute() or die($base->errstr()); #script de récuperation: #!/usr/bin/perl -w use DBI; use strict; my $source ="dbi:mysql:dbname=database02;host=localhost"; my $user = "root"; my $passwd = ""; my $base =DBI->connect($source,$user,$passwd); my $sql = "select data2 from t2"; my $req=$base->prepare($sql) or die($base->errstr()); $req->execute() or die($base->errstr()); my $i=0; while (my @t =$req->fetchrow_array()) { open(TEST,">test$i"); binmode(TEST); print TEST $t[0]; close(TEST); $i++; }
Je pense que c'est la récupération qui pose problème.
Je suis novice en la matière alors si quelqu'un à une idée...
Merci d'avance.
Partager