首页 > 解决方案 > 通过 PHP 文件下载使用 Content-Length 时如何修复“下载不完整”错误

问题描述

我创建了一个 downloadt.php 文件来直接从电子邮件服务器下载我的电子邮件附件,而不将其保存在我的网站空间中。我单击提交按钮将数据发布到我的 save_attachment.php 文件。

它工作得很好,但如果我添加“内容长度”行,它不会每次都有效。所以我发现,并不是所有的智能手机浏览器都能在这条线上正常工作。所以我检查是否有智能手机,如果没有,我添加内容长度。因为我想知道桌面浏览器中的文件大小和下载过程。

现在可以了。但是,如果我尝试下载更大的文件(超过 1-2MB),则下载开始,但因“下载不完整”而关闭。小文件效果很好(50 KB)。

编辑:在 chrome 中工作。问题仅在IE中...

我试图改变 Content-type, header("Pragma: public"); header("过期时间:0"); header('HTTP/1.1 206 部分内容');

<?php
session_start();

If ((Isset($_POST['uid']) == false) or (Isset($_SESSION['user']) == false) or (Isset($_SESSION['pw']) == false)) {
    echo ("Keine Zuordnung vorhanden");
    return;
}

$get_username = $_SESSION['user'] ;
$get_pw = $_SESSION['pw'] ;
$get_server_in = $_SESSION['server_in'];
$get_uid = $_POST['uid'];
$get_partNum =  $_POST['data-attachment_partNum'];
$get_encoding = $_POST['data-enc'];         

$imap_open= imap_open($get_server_in, $get_username, $get_pw);
$msgno = imap_msgno($imap_open, $get_uid);    

function downloadAttachment($imap, $uid, $partNum, $encoding) {
    $partStruct = imap_bodystruct($imap, imap_msgno($imap, $uid), $partNum);
$filesize = $partStruct->bytes;
$filename = $partStruct->dparameters[0]->value;

    $message = imap_fetchbody($imap, $uid, $partNum, FT_UID);

$path_info = pathinfo($filename);    

    switch ($encoding) {
        case 0:
        case 1:
            $message = imap_8bit($message);
            break;
        case 2:
            $message = imap_binary($message);
            break;
        case 3:
            $message = imap_base64($message);
            break;
        case 4:
            $message = quoted_printable_decode($message);
            break;
    }    

   header("Content-Description: File Transfer");
    header("Content-Type: application/octet-stream"); 
    header("Content-Disposition: attachment; filename=" . $filename);
    header("Content-Transfer-Encoding: binary");
    header("Pragma: public");
    header("Expires: 0");
    header('HTTP/1.1 206 Partial Content');

    if ($_SESSION['mobile'] != "true"){
    header("Content-Length: ".$filesize);
       header("Content-Range: 0-".($filesize-1)."/".$filesize);

    }       

    echo $message;             

    //echo $filesize;
         // echo ini_get ( 'memory_limit');
}

downloadAttachment($imap_open, $get_uid, $get_partNum, $get_encoding);

?>

谢谢您的帮助

标签: phphtml

解决方案


推荐阅读