Magento自定义选项上传的最大文件大小?

时间:2011-09-08 12:47:20

标签: php magento

我在谷歌到处都看了,但我看不出是否有办法做到这一点 - 我的Magento产品上有自定义选项,允许客户上传文件。但我需要对此设置一个文件大小限制来阻止某人向我发送一个99GB的文件,这会导致服务器崩溃。

肯定有某个地方我可以设置这个吗?

3 个答案:

答案 0 :(得分:1)

这与php设置upload_max_filesize有关。您可以从 php.ini 更改此项,其他受影响的变量是post_max_size(可以通过表单发布的数据量)以及发送的所有内容必须适合内存/磁盘

see more from php manual

答案 1 :(得分:1)

您可以通过.htaccess更改最大尺寸属性,这是真的。但是对于给定的接口,你可以通过Varien_File_Uploader的回调函数在Magento中更细粒度。因此,您可以将应用程序的大小设置为具有50MB文件的最大网站范围的帖子值.htaccess,但是进一步限制某些界面上的文件限制,10MB用于A { {1}}代表B,等等......

答案 2 :(得分:0)

重复使用表 catalog_product_option 中的字段 image_size_y ,我们可以在此处设置最大文件大小。然后,我们需要覆盖2个核心文件和2个 phtml 文件 1.覆盖Mage_Catalog_Model_Product_Option

protected function _afterLoad()
{
    $this->setMaxFileSize();
    return parent::_afterLoad();
}

public function setMaxFileSize()
{
    if (!preg_match('/(jpg|png|bmp)/i', $this->getFileExtension())) {
        $this->setData('max_file_size', $this->getImageSizeY());
        $this->setData('image_size_y', 0);
    } else {
        $this->setData('max_file_size', 0);
    }
    return $this;
}

2。覆盖Mage_Catalog_Model_Product_Option_Type_File

public function setOption($option)
{
    $option->setMaxFileSize();
    $this->_option = $option;
    return $this;
}

protected function _getUploadMaxFilesize()
{
    if ($kb = $this->getOption()->getMaxFileSize()) {
        return min(parent::_getUploadMaxFilesize(), $kb*1024);
    }
    return parent::_getUploadMaxFilesize();
}

protected function _bytesToMbytes($bytes)
{
    return round($bytes / (1024 * 1024), 2);
}

3。 \应用\设计\前端\ yourpackage \默认\模板\目录\产品\视图\选项\类型\ file.phtml:

<?php $_option = $this->getOption()->setMaxFileSize(); // replace first line of code ?>
...
<!-- add the following after <?php if ($_option->getImageSizeY() > 0): ?>...<?php endif; ?> -->
<?php if ($_option->getMaxFileSize() > 0): ?>
    <script type="text/javascript">
    $('options_<?php echo $_option->getId() ?>_file').addClassName('validate-file-size');
    $('options_<?php echo $_option->getId() ?>_file').setAttribute('max-file-size', <?php echo $_option->getMaxFileSize() ?>);
    </script>
    <p class="no-margin"><?php echo Mage::helper('catalog')->__('Maximum file size')?>: <strong><?php echo $_option->getMaxFileSize() ?> <?php echo Mage::helper('catalog')->__('KB')?></strong></p> 
<?php endif; ?>    

4. \ app \ design \ frontend \ yourpackage \ default \ template \ catalog \ product \ view \ options.phtml,添加以下js:

Validation.add('validate-file-size', '<?php echo $this->jsQuoteEscape(Mage::helper('catalog')->__('Exceeded maximum file size'))?>',
    function(value, elm) {
        var maxsize = +elm.getAttribute('max-file-size') || 1024; // kb            
        var size = elm.files[0].size/1024; // kb
        return maxsize > size;
    }
);

以上在Firefox上的Magento 1.9.0.1中测试过,验证脚本可能无法在IE中使用。