2016-08-03 3 views
0

Ich muss die Datei hochladen und senden Sie die hochgeladene Datei als Anhang in Mail und laden Sie die Datei von der Webseite. Der Inhalt der Datei wird in der Datenbank mit dem Datentyp mediumblob gespeichert. Das Hochladen der Datei und das Senden der Datei als Anhang funktioniert einwandfrei. Beim Herunterladen der Datei sind die Inhalte nicht im lesbaren Format. Die Inhalte sind Display alsUpload sendfile Datei als Anlage und laden Sie die Datei in PHP

PD9waHANCg0KLy8gTWFrZSBhIE15U1FMIENvbm5lY3Rpb24NCiRob3N0PSJUZWthbGFkYi5kYi45 
MTM1MTgyLmhvc3RlZHJlc291cmNlLmNvbSI7DQokdXNlcj0iVGVrYWxhZGIiOw0KJHBhc3N3b3Jk 

Hier ist der Code

upload.php

<?php 
session_start(); 
// Read POST request params into global vars 
include_once "db.php"; 

$name1=mysql_real_escape_string(stripslashes($_POST['name1'])); 
$subject1=mysql_real_escape_string(stripslashes($_POST['subject1'])); 
$email1=$_POST['email1']; 
$phone=$_POST['phone']; 
$username=mysql_real_escape_string($_SESSION['sess_user4']); 
    $to = "[email protected]"; 
$from=$_POST['email1']; 
$fileatt  = $_FILES['fileatt']['tmp_name']; 
$fileatt_type = $_FILES['fileatt']['type']; 
$fileatt_name = mysql_real_escape_string($_FILES['fileatt']['name']); 
$fileatt_size = $_FILES['fileatt']['size']; 
$aa=filesize($fileatt); 
$headers = "From: $from"; 
if (is_uploaded_file($fileatt)) { 
    // Read the file to be attached ('rb' = read binary) 
$name1=mysql_real_escape_string(stripslashes($_POST['name1'])); 
    $file = fopen($fileatt,'r'); 
    $content = fread($file,filesize($fileatt)); 


fclose($file); 
$message="Name:$name1\n\n 
      Email:$email1\n 
      Subject:$subject1\n 
      Phone No:$phone"; 
    // Generate a boundary string 
    $semi_rand = md5(time()); 
    $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 


    // Add the headers for a file attachment 
    $headers .= "\nMIME-Version: 1.0\n" . 
       "Content-Type: multipart/mixed;\n" . 
       " boundary=\"{$mime_boundary}\""; 

    // Add a multipart boundary above the plain message 
    $message = "This is a multi-part message in MIME format.\n\n" . 
      "--{$mime_boundary}\n" . 
      "Content-Type: text/html; charset=\"iso-8859-1\"\n" . 
      "Content-Transfer-Encoding: 7bit\n\n" . 
      stripslashes($message). "\n\n"; 

    // Base64 encode the file data 
    $content = chunk_split(base64_encode($content)); 

    // Add file attachment to the message 
    $message .= "--{$mime_boundary}\n" . 
       "Content-Type: {$fileatt_type};\n" . 
       " name=\"{$fileatt_name}\"\n" . 
       //"Content-Disposition: attachment;\n" . 
       //" filename=\"{$fileatt_name}\"\n" . 
       "Content-Transfer-Encoding: base64\n\n" . 
       $content . "\n\n" . 
       "--{$mime_boundary}--\n"; 

} 

// Send the message 
$ok = @mail($to, $subject, $message, $headers); 
if ($ok) { 
    echo "<script>window.open('display.php','_self')</script>"; 
} else { 
    echo "<p>Mail could not be sent. Sorry!</p>"; 
} 
$query = "INSERT INTO register (name,type,size,content,name1,email1,subject1,phone,username) VALUES ('$fileatt_name','$fileatt_type','$fileatt_size','$content','$name1','$email1','$subject1','$phone','$username')"; 

mysql_query($query) or die('Error, query failed'); 

?> 

download.php

<html> 
     <head> 
      <title>Download File From MySQL Database</title> 
      <meta http-equiv="Content-Type" content="text/html; 
        charset=iso-8859-1"> 
     </head> 
     <body> 
     <?php 
    include_once "db.php"; 
    if(isset($_GET['id'])) { // if id is set then get the file with the id from database 
    $id = $_GET['id']; 
$content = chunk_split(base64_decode($content)); 
    $query = "SELECT name, type, size, content FROM register WHERE id = $id"; 
    $result = mysql_query($query) or die('Error, query failed'); 
    list($name, $type, $size, $content) = mysql_fetch_array($result); 
    header("Content-length: $size"); 
    header("Content-type: $type"); 
    header("Content-Disposition: attachment; filename=$name"); 
    echo $content; exit; 
    } 
    $query = "SELECT id, name FROM register"; 
    $result = mysql_query($query) or die('Error, query failed'); 
    if(mysql_num_rows($result) == 0) 
    { 
    echo "Database is empty"; 
    } 
    else 
    { 
    while(list($id, $name) = mysql_fetch_array($result)) 
    { 
    ?> 
    <a href="download.php?id=<?php echo $id;?>"><?php echo $name; ?></a> 
    <?php 
    } 
    } 
    ?> 
    </body> 
    </html> 

Antwort

0

Ich denke Problem in Header, der bereits Sätze . Versuchen Sie diesen Code:

<?php 
include_once "db.php"; 
if (isset($_GET['id'])) { // if id is set then get the file with the id from database 
    $id = $_GET['id']; 
    $query = "SELECT name, type, size, content FROM register WHERE id = $id"; 
    $result = mysql_query($query) or die('Error, query failed'); 
    list($name, $type, $size, $content) = mysql_fetch_array($result); 
    header("Content-length: $size"); 
    header("Content-type: $type"); 
    header("Content-Disposition: attachment; filename=$name"); 
    echo base64_decode(str_replace("\n", "", $content)); 
    exit; 
} else { 
?> 
<html> 
<head> 
    <title>Download File From MySQL Database</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
</head> 
<body> 
<?php 
$query = "SELECT id, name FROM register"; 
$result = mysql_query($query) or die('Error, query failed'); 
if (mysql_num_rows($result) == 0) { 
    echo "Database is empty"; 
} 
else { 
    while (list($id, $name) = mysql_fetch_array($result)) { 
     ?> 
     <a href="download.php?id=<?php echo $id; ?>"><?php echo $name; ?></a> 
     <?php 
    } 
} 
} 
?> 
</body> 
</html> 
+0

Wenn der obige Code auch das Problem ist das gleiche. Die hochgeladene Datei liest den Inhalt, während die heruntergeladene Datei den Inhalt wie folgt liest. UEsDBBQABgAIAAAAIQDfpNJsWgEAACAFAAATAAgCW0NvbnRlbnRfVHlwZXNdLnhtbCCiBAIooAAC AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA – user6582683

+0

wie Sie base64 die Datei verschlüsselt haben, ich glaube, das einzige, was hier ist base64 DECODE –

+0

fehlt und natürlich müssen Sie chunk_split zurückkehren;) durch neue Linien zu entfernen –