iT邦幫忙

1

Codeligniter 上傳檔案問題

php

您好:
我使用 Codeligniter 3.1.6 ,參考
https://segmentfault.com/a/1190000000396029

但結果卻
string(128) "
The filetype you are attempting to upload is not allowed.
The filetype you are attempting to upload is not allowed.

我有試著去 參考這一篇
https://www.itread01.com/content/1557134434.html
可以上傳,但會出現 2個檔案

我有再去看類似
http://liubin.nanshapo.com/2013/11/26/codeigniter-the-filetype-you-are-attempting-to-upload-is-not-allowed/

https://www.mofish.work/thread/2693
也有去改
mimes.php

但都沒效
請問 這要由哪邊著手?
謝謝!

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
dragonH
iT邦超人 5 級 ‧ 2019-09-02 13:43:17
最佳解答

會有兩個檔案是因為你的確呼叫了兩次 do_upload

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Upload2 extends CI_Controller {
    function index()
    {
        $this -> load -> view('uploader2.php');
    }

    function up()
    {
        // 把需要的配置放入config数组
        $config['upload_path'] = './uploads';
        $config['allowed_types'] = 'gif|jpg|png';
        $config['max_size'] = '102400';
        $this->load->library('upload', $config); //调用CI的upload类
        //$this->upload->do_upload('upfile'); //使用do_upload('上传框的name')方法进行上传

        // 以下代码为拓展的,非必要
        if ($this->upload->do_upload('upfile')) { //上传成功
            $data = array('upload_data' => $this->upload->data()); //将文件信息存入数组
            var_dump($data); //打印文件信息
        } else { //上传失败
            $error = array('error' => $this->upload->display_errors());//将错误信息存入数组
            var_dump($error); //打印错误信息
        }
    }
}

把 if 前面呼叫的那個do_upload拿掉應該就正常了

你的 code 我只拿掉那行

就可以正常運作

gif|jpg|png 都可以正常上傳


話說你之前的問題都解決了嗎

發問斷尾

久而久之會越少人回答喔

看更多先前的回應...收起先前的回應...
noway iT邦研究生 3 級 ‧ 2019-09-02 20:59:52 檢舉

您好:
謝謝, 有可能是 原來網站的jpg 或下載存PNG 所致
那像這樣,我該如何來判斷呢? 或 讓他可以上傳呢?
謝謝!

dragonH iT邦超人 5 級 ‧ 2019-09-02 22:46:09 檢舉

noway

首先你要知道你想上傳的檔案

到底是什麼格式

print(mime_content_type(你的檔案));

「原來網站的jpg 或下載存PNG 所致」
就是我說的檔案類型的判斷不同。

一般很多人都以為直接改副檔名就行了。
其實某些類型的檔案,都會記錄實體的規範類別是什麼。
如圖片檔幾乎都會記錄。

所以一但你下載了jpg檔,並將其改名成png。或許你是想要分類成png。
但程式判斷下的類別其實還是原本的jpg。

noway iT邦研究生 3 級 ‧ 2019-09-03 21:13:23 檢舉

您好:
謝謝!
只是 為何 x.jpg 改名為 x.png
但 $config['allowed_types'] = 'gif|jpg|png|jpeg'; //可上傳類型

兩者都有,為何 無法丟上去??
我用
echo (mime_content_type($_FILES["upfile"]["tmp_name"])) . "" ;
有抓出 TYPE,但 這 結果,也使能DEUBG用,無法 轉換?讓上它可上傳!
謝謝!

dragonH iT邦超人 5 級 ‧ 2019-09-03 21:20:07 檢舉

所以你用

mime_content_type 拿到的結果是什麼

mime_content_type只是用來看 mime type 而已

沒有什麼轉換的功能

0

依其錯誤訊息是告訴你該檔案型態不允許上傳。

因為你並未po出你實際寫的程式碼,也未說你上傳的東西是什麼。
基本判斷如下。

你上傳了你並未允許的檔案型態。(廢話)。
只是這邊要注意一件事。所謂的檔案型態有分副檔名判斷跟檔案實際類別判斷。
其中單純用副檔名判斷的。會比較單純點只要副檔名對就行了。只是也有可能會因為某些原因造成錯誤。如將png圖檔改名成jpg副檔名的情況。就很容易發生這樣的問題。

noway iT邦研究生 3 級 ‧ 2019-09-02 09:24:34 檢舉

您好:
不好意思,單存用

<form action="upload2/up" method="post" enctype="multipart/form-data">
    <input type="file" name="upfile">
    <input type="submit" name="sub" value="submit">
</form>

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Upload2 extends CI_Controller {
    function index()
    {
        $this -> load -> view('uploader2.php');
    }

    function up()
    {
        // 把需要的配置放入config数组
        $config['upload_path'] = './uploads';
        $config['allowed_types'] = 'gif|jpg|png';
        $config['max_size'] = '102400';
        $this -> load -> library('upload', $config); //调用CI的upload类
        $this -> upload -> do_upload('upfile'); //使用do_upload('上传框的name')方法进行上传

        // 以下代码为拓展的,非必要
        if ($this -> upload -> do_upload('upfile')) { //上传成功
            $data = array('upload_data' => $this -> upload -> data()); //将文件信息存入数组
            var_dump($data); //打印文件信息
        } else { //上传失败
            $error = array('error' => $this -> upload -> display_errors());//将错误信息存入数组
            var_dump($error); //打印错误信息
        }
    }
}

那我該如何 副檔名判斷 跟 檔案實際類別判斷
我有從網路上抓下來 jpg,但 也無法上傳...
他這一個範例,應該只是「副檔名」判斷吧
謝謝!

noway
你的coding style要調整一下。
=號的左右間隔這是明確區分變數和值所以ok。
但是->為標示物件的屬性或是方法,其為所屬物件的內容,這種的左右就不要加空白。

我要發表回答

立即登入回答