【问题标题】:Codeigniter Multiple File Upload Encryption IssueCodeigniter 多文件上传加密问题
【发布时间】:2013-05-04 17:05:52
【问题描述】:

我有一个大表单,允许用户将多个文件/文件类型上传到他们正在创建的报价/出价。一切正常,除了一件:保存到数据库之前文件的名称加密。

我还没有找到它的韵律或原因,但它是命中注定的。图像每次都能正常工作。其他文档(允许所有 [*] 类型,但主要包含各种业务文档,例如 pdf、doc、xls 等)是参差不齐的。

我在 SO 和其他地方发现了有关名称加密的一般问题的线程,但还没有遇到一个处理我的问题的特殊性的线程。

上传功能如下:

//for multi uploads
        function do_uploads($name, $file)
        {
            $status ="";
            $msg = "";
            $file_element_name = $name;


            //go through and figure out where it goes
            if($name == "QuoteDoc") {
                $folder = "quotedocs";
                $allowed = '*';
            }
            else if($name == "ProductOfferPhoto") {
                $folder = "product_photos";
                $allowed = 'jpeg|jpg|png|gif';
            }
            else if($name == "ResearchWhtPaper1" || $name == "ResearchWhtPaper2") {
                $folder = "research";
                $allowed = "*";
            }
            else if($name == "ProductLiterature1" || $name == "ProductLiterature2") {
                $folder = "literature";
                $allowed = "*";
            }
            else if ($name == "FDALink") {
                $folder = "fda";
                $allowed = "*";
            }


            $config['upload_path'] = './uploads/' . $folder;
            $config['allowed_types'] = $allowed;
            $config['max_size']  = 1024 * 8;
            $config['encrypt_name'] = TRUE;

            $this->load->library('upload', $config);

            if ( ! $this->upload->do_upload($name))
            {
                $status = 'error';
                $msg = $this->upload->display_errors('', '');
            }
            else {
                $data = $this->upload->data();
            }

            @unlink($_FILES[$file_element_name]);

            //what's up?
            //return $this->upload->data();
            return array('status' => $status, 'msg' => $msg, 'data' => $this->upload->data(), 'allowed'=>$allowed);
        }

任何帮助将不胜感激。

【问题讨论】:

  • 那么你得到什么文件名?原版?
  • 抱歉,问题是上传过程中哪些文件名没有加密,在$this->upload->data() ?

标签: php codeigniter file-upload


【解决方案1】:

你没有很清楚地表达你的问题:

这些名称是否只是没有被加密,但仍在上传到正确的目录?

您是否将这些设置在一个循环中,而类实例可能没有被重新初始化?第一个文件是否正确加密,但后面的不是?

您能跟踪哪些文件类型不能正常工作吗?

我很难相信这完全是“随机的”,并且认为这里所做的研究还不够


下面的解决方案:

你需要使用 $this->upload->initialize($config) 来改变配置,因为这个库只会被加载一次

【讨论】:

  • 对不起,我以为我已经很清楚了:文件的名称加密在保存到数据库之前。不过,我可以看到它可能有点模棱两可。只有加密部分是一个问题。文件名以任何一种方式保存都很好。 jpg 文件永远不会有问题。有的pdf有,有的没有。 doc/x 文件也一样。我可以做更多的测试,看看是否能找到更好的模式。
  • 是的,这个函数在foreach 循环中被调用。谢谢-
  • 第一:你应该返回$data,而不是$this->upload->data();第二:我怀疑当您在循环中从一种类型更改为另一种类型时,您的问题出在文件上?我认为您需要使用 $this->upload->initialize();不要尝试重新加载类,因为 CI 已经注册了它
  • 做到了。重新初始化完成了工作。非常感谢!您可以编辑您的答案以包含它,以便我可以接受吗?谢谢-
猜你喜欢
  • 2015-11-23
  • 1970-01-01
  • 2017-09-29
  • 2012-01-09
  • 2018-01-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多