通过PHP文件下载使用Content-Length时,如何解决“下载不完整”错误

时间:2019-08-20 15:35:32

标签: php html

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

它很好用,但是如果我添加“ Content-Length”行,那么它就不会每次都起作用。因此,我发现,并非所有智能手机浏览器都能在此行中正常工作。因此,我检查是否有智能手机,如果没有,请添加内容长度。 因为我想知道桌面浏览器中的文件大小和下载过程。

现在可以使用。但是,如果我尝试下载更大的文件(超过1-2MB),则开始下载,但由于“未完成下载”而关闭。小文件效果很好(50公里)。

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

我试图更改Content-type标头(“ Pragma:public”); header(“ Expires:0”); header('HTTP / 1.1 206 Partial Content');

<?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);

?>

谢谢您的帮助

0 个答案:

没有答案