下载时,Virtuemart Media文件会丢失所有元信息

时间:2019-05-24 08:24:37

标签: virtuemart utf8mb4

我的媒体文件在下载时会丢失所有元信息。我有一个网站,提供可下载的虚拟产品。它会影响此处的Android应用文件,即apk。

如果我要下载并安装文件,则会出现以下错误。

  

解析程序包时出现问题。

下载软件包(apk)不包含版本号,文件大小,软件包名称。它仅显示N / A。

场景:

  • 我已经直接从vmfiles文件夹通过ftp下载了apk文件。 可用的元数据-安装正常。

  • 下载网站-文件不包括版本号,文件大小,程序包名称。安装失败并显示以上消息。

我与之合作:

  • VirtueMart 3.2.15蓝色乌鸦9877
  • Joomla 3.8.7
  • OpenTools Virtuemart下载待售插件

我将数据库切换到utf8mb4,因为我需要文本和描述中的符号。从那时起,我认为下载的产品可能无法使用。

我修改了varchar字段varchar(191),或将其更改为文本。我只是不知道丢失包裹信息的原因,方式和地点。

这是另一个phpmyadmin mysql变量/排序规则查询:

SHOW VARIABLES LIKE 'char%'

--------------------
Web server productive:
-------------------------------------
variable_name value
character_set_client utf8mb4
character_set_connection utf8mb4
character_set_database utf8mb4
character_set_filesystem binary
character_set_results utf8mb4
character_set_server utf8
character_set_system utf8
character_sets_dir / usr / share / mysql / charsets /

----------
Local Host:
-------------------------------------
Variable_name Value
character_set_client utf8mb4
character_set_connection utf8mb4
character_set_database utf8mb4
character_set_filesystem binary
character_set_results utf8mb4
character_set_server utf8mb4
character_set_system utf8
character_sets_dir C: \ xampp \ mysql \ share \ charsets \

我已经在2016年2月从OpenTools购买了该软件。不再支持该软件。也许我可以在论坛中或通过电子邮件与某人联系。如我所说,服务器上的上传文件仍然可以。然后下载软件通过readfile_chunked逐字节读取文件流以获取下载链接。

也许某些base64或某些内容必须在此处编码?还是其他地方出错了?

Android Studio在打开下载的.apk文件时说:

  

未知块类型:835   java.lang.NullPointerException:未知块类型:835

Virtuemart与utf8一起使用,mysql支持Multi(utf8 + utf8mb4)。我的系统是使用utf8mb_unicode_ci设置的。

我应该切换到连接编码utf8mb4_bin吗? Virtuemart意识到了吗?我一定会尝试的。

我发现了另一个有关mysql_encoding的代码段:

utf8mb4在这里丢失:

switch($mysql_encoding[0])
{
    case "utf8":
        return "utf-8";
        break;
    case "latin1":
        return "iso-8859-1";
        break;
    default:
        return $mysql_encoding[0];
}

这样的事情是否应该和我一起纳入Virtuemart模型中?我在某个地方从Java二进制变量中读取了一些专门用于utf8mb4调用处理的内容。您必须设置此额外功能。另外,附上'? JDBC URL下载链接的UseUnicode = true和characterEncoding = UTF-8'没有帮助。

1 个答案:

答案 0 :(得分:1)

在另一个论坛中编码上帝可以进一步帮助我,找到解决方法:-) 在使用的readfile_chunked查询器中,是否删除输出缓冲区 这里。解决方案是将ob_clean ()放在while循环之前。

function readfile_chunked($filename, $retbytes=true)
{
    $ chunksize = 1 * (1024 * 1024); // how many bytes by chunk
    $ buffer = '';
    $ cnt = 0;
                    
    $ handle = fopen ($ filename, 'rb');

    if ($ handle === false) 
    {
       return false;
    }
    ob_clean ();

    while (! feof ($ handle)) 
    {
       $ buffer = fread ($ handle, $ chunksize);
       echo $ buffer;
       ob_flush ();
       flush ();
                           
       if ($ retbytes) 
       {
          $ cnt + = strlen ($ buffer);
       }
    }                  
    $ status = fclose ($ handle);

    if ($ retbytes && $ status) 
    {
       return $ cnt; // return num. bytes delivered like readfile () does.
    }                   
    return $ status;
}