Horst: Hochgeladene Dateien im ASCII-Format in einer DB speichern

Beitrag lesen

Moin Moin!

Danke Alexanter!

siehe Thema. Max_Size ist 0.7 MB/File.

Wer garantiert diese Maximalgröße?

Mein Script.

Die Dateien werden im ASCII-Zeichensatz (Base64_encode, _decode) in ein Textfeld geschrieben. Damit bin ich unabhängig vom verwendeteten Zeichensatz, den die RDMS spricht (in meinem Fall mySQL).

Und Du hast 33% Overhead.

Das kann ich nicht nachvollziehen. Die ASCII-Datei ist exact genauso groß wie die binary-Datei. Wo genau liegt denn der Overhead? Im RDBMS Text vs. Blob?

Viele Grüße,
Hotte

Stück Script:

  • Content-Type liefert der User-Agent,
  • Dateigröße ist nach base64_encode genauso groß.
  
sub upload{  
 my $fqd_filename = $q->param('file') or cgiError("Keine Datei","Backbutton...");  
 fileparse_set_fstype("MSDOS");  
 my ($ori_filename, $local_path) = fileparse $fqd_filename;  
 my $mime_type = $q->uploadInfo($fqd_filename)->{'Content-Type'};  
 my ($str,$buffer,$sum,$bytesread);  
 while ( $bytesread = read($fqd_filename,$buffer,1024)) {  
   $str .= $buffer;  
   $sum += $bytesread;  
  
   cgiError("Datei zu dick") if $sum > $maxsize;  
 }  
 $sum or cgiError("0 Bytes, Abbruch","Backbutton...");  
 $str = encode_base64($str);  
  
 # nun die Tabelle beschreiben  
 my $description = ($q->param('description')) ? $q->param('description') : 'NA';  
  
 $description = $dbh->quote($description);  
  
 $dbh->do("INSERT INTO filebase VALUES('', '$ori_filename', $description, '$sum', '$mime_type', '$str')") or cgiError($dbh->errstr);  
  
 redir($ENV{SCRIPT_NAME});  
}