Mmikael_aMedlem sedan mars 2000475 inlägg Jag sparar olika filer i en databas som en blob, dessa vissas genom showFiles.php och trycker man på länken ladda ner, så anropas filen downloadFile.asp och filen laddas ner... nackdelen är att filnamnet blir downloadFile.xxx (xxx = fil ändelse) hur gör man för att filen skall få namnet tex bild.jpg och inte downloadFile.jpg....
databasen ser ut enligt följande:
id (int) = id
title (tinytext) = rubrik (tex bild på datorn)
description (text) = beskriving
file (longblob) = själva bilden som en blob
file_name (text) = fil namnet (tex bild.jpg)
file_size (int) = storleken på bilden
file_typ (tinytext) = typ av fil, tex .zip, .jpg, .doc osv)
added (datetime) = datum
visible (tinyint) = 1 eller 0
det som skall visas är alltså file_name
*** showFiles.asp ***
<?php
// Database connection variables
$dbServer = "localhost";
$dbDatabase = "xxx";
$dbUser = "xxx";
$dbPass = "xxx";
$sConn = mysql_connect($dbServer, $dbUser, $dbPass)
or die("Couldn't connect to database server");
$dConn = mysql_select_db($dbDatabase, $sConn)
or die("Couldn't connect to database $dbDatabase");
$dbQuery = "SELECT id, title, file_type ";
$dbQuery .= "FROM ca_entry ";
$dbQuery .= "ORDER BY added DESC";
$result = mysql_query($dbQuery) or die("Couldn't get file list");
?>
<table border="1" cellpadding="0" cellspacing="0" bordercolor="#111111" width="100%">
<tr><td width="34%" bgcolor="#FF9900" height="21">
<p style="margin-left: 10"><b><font size="2" face="Verdana" color="#FFFFFF">
Beskrivning</font></b></td>
<td width="33%" bgcolor="#FF9900" height="21">
<p style="margin-left: 10"><b><font face="Verdana" size="2" color="#FFFFFF">
Filtyp</font></b></td>
<td width="33%" bgcolor="#FF9900" height="21">
<p style="margin-left: 10"><b><font face="Verdana" size="2" color="#FFFFFF">
Fil</font></b></td></tr>
<?php
while($row = mysql_fetch_array($result))
{
?>
<tr>
<td width="34%" bgcolor="#FFDCA8" height="21">
<p style="margin-left: 10; margin-right: 10">
<font face="Verdana" size="1">
<?php echo $row["title"]; ?>
</font>
</td>
<td width="33%" bgcolor="#FFDCA8" height="21">
<p style="margin-left: 10">
<font face="Verdana" size="1">
<?php echo $row["file_type"]; ?>
</font>
</td>
<td width="33%" bgcolor="#FFDCA8" height="21">
<p style="margin-left: 10"><font face="Verdana" size="1">
<a href="downloadFile.php?id=<?php echo $row["id"]; ?>">
Ladda ner
</a></font>
</td>
</tr>
<?php
}
echo "</table>";
?>
*** downloadFile.asp ***
<?php
$id = $_GET[id];
//$id;
if(!is_numeric($id))
die("Invalid id specified");
// Database connection variables
$dbServer = "localhost";
$dbDatabase = "xxx";
$dbUser = "xxx";
$dbPass = "xxx";
$sConn = mysql_connect($dbServer, $dbUser, $dbPass)
or die("Couldn't connect to database server");
$dConn = mysql_select_db($dbDatabase, $sConn)
or die("Couldn't connect to database $dbDatabase");
$dbQuery = "SELECT file_name, file_type, file ";
$dbQuery .= "FROM ca_entry ";
$dbQuery .= "WHERE id = $id";
$result = mysql_query($dbQuery) or die("Couldn't get file list");
if(mysql_num_rows($result) == 1)
{
$fileType = @mysql_result($result, 0, "file_type");
$fileContent = @mysql_result($result, 0, "file");
header("Content-type: $fileType");
echo $fileContent;
}
else
{
echo "Record doesn't exist.";
}
?>
tack för all hjälp...
MatteMedlem sedan aug. 20002 975 inläggDet där med att sätta headers för nedladdning, och som funkar i alla webläsare, verkar vara en djungel.
Läser du användarnoteringarna för header i manualen så sägs det mycket om det. Det är inte säkert att du blir klokare, men jag rekommenderar en ordentlig genomläsning här: http://se.php.net/manual/en/function.header.php
Med lite av vad som framgår där, och på andra håll har jag funnit att man kommer en bit på vägen med (det downloadskript som jag använder):
$sql = "SELECT * FROM file_table where id='{$_GET['id']}'";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
header("Content-Type: application/save");
header("Content-type: ".$row['filetype']);
header("Content-Disposition: attachment; filename=".$row['filename']);
header("Content-Length: ".$row['filesize']);
header("Content-Transfer-Encoding: binary");
echo $row['bin_data'];
Jag tror ändå det är långt ifrån heltäckande, och det finns säkert saker som kunde gjorts annorlunda och bättre.
Mmikael_aMedlem sedan mars 2000475 inlägg hmmm jag får parse error på rad 22 dvs header("Content-Length: $file_size");
if(mysql_num_rows($resultat) == 1){
$fileType = @mysql_result($resultat, 0, "file_type");
$fileContent = @mysql_result($resultat, 0, "file");
header("Content-Type: application/save");
header("Content-type: $fileType");
header("Content-Disposition: attachment; file_name=$file_name);
header("Content-Length: $file_size");
header("Content-Transfer-Encoding: binary");
echo $fileContent;
}//end if...
else{
echo "Record doesn't exist.";
}//end else...
SstevenetMedlem sedan juni 20001 251 inlägg Det fattas en " på raden ovan.
Mmikael_aMedlem sedan mars 2000475 inlägg tack... jag löste det :)
jag använde:
if($data = mysql_fetch_assoc($resultat)){
if(stristr('mac', $_SERVER['HTTP_USER_AGENT'])) {
$type = 'application/download';
} else {
$type = 'application/octet-stream';
}
header("Content-Type: {$type}");
header("Content-Disposition: attachment; filename=\"{$data['file_name']}\"");
header("Content-Length: {$data['file_size']}");
header("Content-Transfer-Encoding: binary");
echo $data['file'];
return TRUE;
}
else {
return FALSE;
echo "Record doesn't exist.";
}