Typecho 文件下载插件,使下载的文件保持上传时的文件名。

  • 仅对新上传的文件起作用。
  • 旧文件需在修改文章页面点击附件中的文件重新插入新下载链接。
  • 插件禁用后会导致启用插件期间已发布文章中的文件无法下载,进入修改文章页面点击附件中的文件重新插入下载链接即可恢复。

原文地址Typecho文件下载插件:DownloadFile 使下载的文件保持上传时的文件名

用了之后发现一个问题,所有的附件都会被重定向下载链接,这样就存在一个问题,当使用该插件后,如果不需要下载的附件链接也会重定向为下载链接。

解决思路

在点击附件插入附件链接时提示我需要插入为什么类型的链接。

解决办法

  1. 启用该插件
  2. 删除该插件的powershell Plugin.php文件中的下列两段:
Typecho_Plugin::factory ( 'admin/fiile-upload-js.php' )->bottom = array ('DownloadFile_Plugin','bottomJS' );
Typecho_Plugin::factory ( 'admin/write-page.php' )->bottom = array ('DownloadFile_Plugin','bottomJS');
  1. powershell admin/file-upload-js.php文件中修改`php
    attachInsertEvent函数,将php Typecho.insertFileToEditor(t.text(),
    p.data('url'), p.data('image'));`修改为:
if(confirm("下载链接保留原文件名称?")==true)
Typecho.insertFileToEditor(t.text(), window.location.protocol + '//' + window.location.host + '/download/file?cid='+p.data('cid'), p.data('image'));
else
Typecho.insertFileToEditor(t.text(), p.data('url'), p.data('image'));

缺点

会因为版本更新而需要重新个性powershell admin/file-upload-js.php文件。

最终文件

该插件的Plugin.php代码为:

<?php
if (! defined ( '__TYPECHO_ROOT_DIR__' ))
    exit ();
/**
 * 文件下载插件,使下载的文件保持上传时的文件名。
 *
 * @package DownloadFile
 * @author DT27
 * @version 1.0.0
 * @link https://dt27.org/
 */
class DownloadFile_Plugin implements Typecho_Plugin_Interface {
    /**
     * 激活插件方法,如果激活失败,直接抛出异常
     *
     * @access public
     * @return void
     * @throws Typecho_Plugin_Exception
     */
    public static function activate() {
        // 创建路由
        Helper::addRoute ( 'download.file', '/download/file', 'DownloadFile_Action', 'downloadFile' );
    }
    
    /**
     * 禁用插件方法,如果禁用失败,直接抛出异常
     *
     * @static
     *
     * @access public
     * @return void
     * @throws Typecho_Plugin_Exception
     */
    public static function deactivate() {
        Helper::removeRoute ( 'download.file' );
    }
    public static function config(Typecho_Widget_Helper_Form $form) {
    }
    public static function personalConfig(Typecho_Widget_Helper_Form $form) {
    }
}