【问题标题】:How to download a file from the view on button click?如何从按钮单击视图中下载文件?
【发布时间】:2014-09-19 03:28:19
【问题描述】:

我需要在我的视图文件中添加一个按钮,允许用户从网站前端下载文件。一切正常:显示数据,但是我不确定如何根据变量中的数据提供可下载的文件。

这是从视图文件生成的数据。

<?php
$vCardData[$i] = '
BEGIN:VCARD
VERSION:4.0
N:'.${'data'.$i}['l_name'].';'.${'data'.$i}['f_name'].';;;
FN:'.${'data'.$i}['title'].' '.${'data'.$i}['f_name'].' '.${'data'.$i}['l_name'].'
ORG:'.${'data'.$i}['company'].'
TEL;TYPE=work,voice;VALUE=uri:tel:'.${'data'.$i}['company_contact_number'].'
TEL;TYPE=home,voice;VALUE=uri:tel:'.${'data'.$i}['number'].'
ADR;TYPE=work;LABEL="'.${'data'.$i}['address_1'].' '.${'data'.$i}['address_2'].'\n'.${'data'.$i}['city'].', '.${'data'.$i}['county'].' '.${'data'.$i}['post_code'].'\n'.${'data'.$i}['county'].'"
:;;'.${'data'.$i}['address_1'].' '.${'data'.$i}['address_2'].';'.${'data'.$i}['city'].';'.${'data'.$i}['county'].';'.${'data'.$i}['post_code'].';'.${'data'.$i}['county'].'
EMAIL:'.${'data'.$i}['email'].'
REV:'.time().'
END:VCARD
';
?>

我需要在单击视图文件中的锚点时以某种方式使用 CodeIgniter force_download()。我尝试将&lt;?php echo site_url( 'controller/function' ); ?&gt; 添加到锚标记,但这只是将我引导到网站http://example.com/controller/function 上的一个页面,我假设这是因为它是从前端调用的。

有什么办法可以做到吗?

进一步说明:我的控制器正在从数据库中选择所有数据并将其传递给我的地址簿视图。在地址簿视图中,我有以下内容:

<?php for ($i = 0; $i < $count; $i++) { ?>
    <div class="col-sm-6 contact_card">
        <h4><?php echo ${'data'.$i}['title']; echo ${'data'.$i}['f_name']; echo ${'data'.$i}['l_name']; ?></h4>
        <?php if (${'data'.$i}['email']) { echo 'e: <a href="mailto:'.${'data'.$i}['email'].'">'.${'data'.$i}['email'].'</a>'; }
        if (${'data'.$i}['number']) { echo '<p>t: '.${'data'.$i}['number'].'</p>'; }

        $vCardData[$i] = '
        BEGIN:VCARD
        VERSION:4.0
        N:'.${'data'.$i}['l_name'].';'.${'data'.$i}['f_name'].';;;
        FN:'.${'data'.$i}['title'].' '.${'data'.$i}['f_name'].' '.${'data'.$i}['l_name'].'
        ORG:'.${'data'.$i}['company'].'
        TEL;TYPE=work,voice;VALUE=uri:tel:'.${'data'.$i}['company_contact_number'].'
        TEL;TYPE=home,voice;VALUE=uri:tel:'.${'data'.$i}['number'].'
        ADR;TYPE=work;LABEL="'.${'data'.$i}['address_1'].' '.${'data'.$i}['address_2'].'\n'.${'data'.$i}['city'].', '.${'data'.$i}['county'].' '.${'data'.$i}['post_code'].'\n'.${'data'.$i}['county'].'"
        :;;'.${'data'.$i}['address_1'].' '.${'data'.$i}['address_2'].';'.${'data'.$i}['city'].';'.${'data'.$i}['county'].';'.${'data'.$i}['post_code'].';'.${'data'.$i}['county'].'
        EMAIL:'.${'data'.$i}['email'].'
        REV:'.time().'
        END:VCARD
        ';?>

        <a href="<?php echo site_url('address_book/vcard') ?>">Download vCard</a>

    </div>
<?php }

【问题讨论】:

  • 您是否考虑过在服务器级别而不是在应用程序中处理这个问题?您的网络服务器可以/应该配置为将 .vcf 作为附件返回。相关:stackoverflow.com/questions/5116772/… 或者 EE 是否会覆盖这些标头?

标签: php codeigniter expressionengine vcf-vcard


【解决方案1】:

您是否考虑过在服务器级别而不是在应用程序中处理这个问题?您的网络服务器可以/应该配置为将 .vcf 作为附件返回。相关:stackoverflow.com/questions/5116772/…

也许 EE 会覆盖这些标头?如果是这样,这里有一个免费的 EE 扩展,它允许您扩展模板类型(每个模板类型都可以有自己的 mime 类型):

http://devot-ee.com/add-ons/template-image-mime-type

您可以轻松修改此扩展程序以包含您需要的下载处理。

我想你想要:application/octet-stream for .vcf

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 2019-10-20
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    • 2018-04-06
    相关资源
    最近更新 更多