如何在下载文件后显示消息?

时间:2011-04-29 17:10:53

标签: php download

我有这个PHP代码,它工作正常。

header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename="WTBak.zip"');
readfile($ArchiveFileName);
echo $ArchiveFileName;
unlink($ArchiveFileName);

我的问题是,如何在执行最后一行(取消链接)后发出消息?

谢谢!

3 个答案:

答案 0 :(得分:1)

<强>假设:

  1. 客户端用户应该收到一条消息,这是发送给客户端的一种消息

  2. 响应是二进制

  3. <强>摘要:

    1. 如果是mhtml格式,则可以将二进制信息与文本响应一起发送到客户端,在邮件中使用,并且每个浏览器都有(有些人没有)支持多部分响应。我们不要选择这种方式

    2. 发送二进制信息以响应一个请求(下载文件),另一个响应另一个请求(下载状态) - 这是一种流行的做法。

    3. <强>解决方案:

        服务器上
      1. :保持下载状态

        // pseudocode:log_download_event(seessionid,status ='started')

        标题('Content-Type:application / zip');

        标题('Content-Disposition:attachment; filename =“WTBak.zip”');

        的ReadFile($ ArchiveFileName);

        echo $ ArchiveFileName;

        的unlink($ ArchiveFileName);

        // pseudocode:log_download_event(seessionid,status ='done')

      2. 服务器上的
      3. 实现一个将以下载状态响应的php

        //伪代码:$ DownloadStatus = get_download_status(sessionid)

        echo'{staus:'+ $ DownloadStatus +'}'

      4. 客户端
      5. :某些事件会触发下载

        window.open( “http://nowhere.com/download.php?resuorce=archive-file.zip”);

        window.theTrackInterval = window.setInterval(trackDownload,1000);

        var trackInterval = function(){

        $。get('ajax / test.html',function(data){

        id(data.status=='ready'){
        
            cleanInterval(window.theTrackInterval);
        
            alert('download is done');
        
        }
        

        });

        }

      6. 此解决方案将每隔一秒开始向服务器发送ajax请求,询问“已完成下载”,并且当它收到确认“它已完成”时,客户端将停止跟踪并提醒消息

        错过了什么: 状态持久性的实现。我不是PHP家伙 - 原谅我这个差距

答案 1 :(得分:0)

看,如果您发送消息,它将在文件中发送,而不会向用户显示,从而破坏/更改文件的内容。您无法修改已经发送的标题!

所以,我觉得,现在有办法!

干杯

答案 2 :(得分:0)

我有一个类似的客户要求。所以我创建了一个工具来在下载文件后显示消息。

您可以在http://www.iamkumaran.com/xdownloader-a-flash-javascript-library/查看并查找演示链接。