2012-02-06 2 views
7

음과 XLSX 파일, 나는 이것이 CodeIgniter의 문제 없는 생각 자체 그것이 마임 타입의 이상 때문이다. 내가 파일, XLS (또는 XLSX) 파일과 MIME 타입 브라우저와 PHP는 보고서를 업로드하기 위해 노력하고있어업로드 XLS 또는 CodeIgniter를, 마임 타입 오류

응용 프로그램/octet-stream을 대신 응용 프로그램입니다/엑셀, 응용 프로그램/vnd.ms-excel 또는 응용 프로그램/msexcel (xls 파일 용) 물론 codeigniter upload plugin은 mime-type과 파일 확장자를 일치 시키려고 할 때 오류 (잘못된 파일 유형)를보고합니다.

이상한 (est) 일은 동일한 코드가 몇 달 동안 작동하여 최신 Chrome (16.0.912.77), Firefox (10.0) 및 IE9로 작업하지 않는 것일 수 있습니다.

누구나 같은 (또는 비슷한) 문제가 있었고 해결책을 공유하는 데 관심이 있습니까?

대단히 감사합니다. 추신 : 실제로 코드 문제가 아니므로 코드를 제공하지는 않지만, 필요한 경우 일부 코드 조각을 업로드 할 예정입니다.

편집

그것은 관련이있을 수 : 오류가 유사한 구성에 동일한 브라우저 발생하지만 (내 PC에) 대신 리브레 오피스의 MS 오피스하지 않습니다. 그것은 GNU/Linux 기반 + Libre Office 시스템에서도 발생하지 않습니다. 그래서, 오픈 소스 스위트에서 열심히 일하는 Windows가 될 수 있습니까, 아니면 Libre Office가 마임 유형을 변경하는 것일까 요?

답변

9
get_mime_by_extension($file)와 다양한 오피스 파일을 테스트 할 것

이 오류도 발생합니다.

CI는 'application/zip'파일 유형을보고합니다. xlsx 형식은 압축 형식이므로 zip으로 이름을 변경하면 내용을 열 수 있습니다.

내가 추가 한

은/MIME 형식 파일 (application/config/mimes.php)에 다음 행을 대체 :

'xlsx' => array('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet','application/zip'), 

하고 (이 브라우저 적어도!) 그냥

+0

hmmm, 문제가 해결되었을 수도 있지만 실수가 아니라면 xlsx 파일이 아닌 .zip 파일을 업로드 할 수 있습니다. –

+0

그래, 처음에는 생각했지만 CI는 파일 확장자와 MIME 유형을 검사 했으므로 확장자가 zip이고 xlsx가 아니기 때문에 오류가 발생하기 때문에 zip 파일을 업로드하려고 시도합니다. 또한 mimes.php 파일에 다음 행을 추가했습니다. 'slk'=> 'text/plain', 'xlsx'=> array ('application/vnd.openxmlformats -0fficedocument.spreadsheetml.sheet ','application/zip '), 'ods '=>'application/octet-stream – Stevo

+0

확장자가 xlsx이고 유효한 xlsx 파일이 아닌 zip 파일은 어떻게됩니까? –

2

이것은 몇 달 전 CI 버그 (https://github.com/EllisLab/CodeIgniter/issues/394)입니다. 프레임 워크의 mimes.php가 업데이트되어 버그가 해결되었습니다. CodeIgniter 라이브러리를 2.1.0 (또는 그 이상)으로 업데이트하십시오.

또한 테스트/덤프하는 것이 서버 mime 유형입니다.

또 다른 대안은 MIME 형식을 강요하는 것입니다. htaccess로와, 그

전체 디버깅 모험
AddType application/excel .xls .xlsx 

이 파일 도우미 (http://codeigniter.com/user_guide/helpers/file_helper.html)

+0

는 답변 주셔서 감사합니다. 불행히도 나는 이미 CI 2.1.0을 사용하고 있으므로 문제는 그렇게해서는 안됩니다. $ _FILES [$ field] [ 'tmp_name']을 테스트했으며 "application/octet-stream"이었습니다. 가장 이상한 일은 내 컴퓨터에서만 일어나는 일입니다. 나중에 다른 컴퓨터의 동일한 브라우저와 OS에서 테스트했습니다 (유일한 차이점은 내 PC의 Libre Office와 다른 Office의 MS Office 일 것입니다). 또한 Libre Office가 설치된 Linux 기반 OS에서 테스트를 해보니 좋았습니다. .htaccess aproach를 시도 할 것입니다. 감사합니다. –

+0

음. .htaccess aproach를 사용해 보았습니다. 아무것도. 응용 프로그램이 가까운 클라이언트에 대한 내부 사용을위한 것이므로이 문제를 해결할 것입니다. 어쨌든이 문제의 원인을 찾고 싶습니다. 그렇지 않다면 답을 받아 들일 것입니다. 그것은 다른 사람들을 도울 수 있습니다. –

2

작동 레코드의 경우, mime-type이 Windows 레지스트리에서 누락되었습니다.reg 파일 :

Windows Registry Editor Version 5.00 

[HKEY_CURRENT_USER\Software\Classes\.xls] 
"Content Type"="application/excel" 

[HKEY_CURRENT_USER\Software\Classes\.xlsx] 
"Content Type"="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" 

위의 솔루션을 사용하는 대신 레지스트리를 망치고 싶지 않습니다.

4

다음 설명과 힌트를 통해 쉽게 답변을 얻으십시오!

설명 :

사실 많은 사람은 추가/파일에서 다음 행 (응용 프로그램/설정/mimes.php) 교체하도록 조언했다 :

'xlsx' => array('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/zip'), 


을하지만 난이 깨달은 CodeIgniter 버전 2.2 * 문제는 조금 다릅니다! 그들은 이미 라인을 추가했지만 다음 "FILE_TYPE"==> '응용 프로그램/vnd.ms-엑셀'

'xlsx' => array('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/zip', 'application/vnd.ms-excel'), 

그래서 추가 위의 '응용 프로그램/vnd.ms-엑셀'을 추가하는 것을 잊었다있다xlsx 파일 유형으로 배열하려면 .xlsx 개의 파일을 업로드 해주세요.

힌트 : 업로드하려는 파일 유형이 허용되지

:

당신이 CodeIgniter의 플랫폼에서, 다음과 같은 오류가 발생하고, 파일 업로드 할 때마다.

당신의 컨트롤러의 업로드 방법 다음을 수행

var_dump($this->upload->data()); 

그리고 그것은 당신에게 당신이 link에서 아이디어를 얻을 수있는 거대한 배열을 제공 할 것입니다. (해당 페이지의 끝을 참조하십시오) . 이 배열에서는 업로드하려는 파일의 실제 mime_type을 가져올 수 있지만 업로드 할 수는 없습니다. 대답

: 내 파일 확장자는 .XLSX 내 경우

, 그리고 마임 유형은

에 추가 할 수 없습니다 응용 프로그램/vnd.ms-엑셀이었다
'xlsx' => array('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/zip'), 

그래서 수동으로 추가하고 그 후에 작동합니다 VERRY WELL !!!

CSV를 다시 업로드 할 때와 같은 일이 발생했습니다. 파일 확장자를 확인하면 입니다.나는 다음 줄에 추가 할 때 CSV하지만 MIME 형식은 텍스트/일반이었다

'csv' => array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel'); 

다음과 같이 저장

'csv' => array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel', 'text/plain'), 

그것은 마법처럼 작동합니다! : D 위 단계에서 새로운 내용을 발견하면 시도해주세요. 여기에 의견을 남기십시오 !!! 이렇게하면 모든 CodeIgniter 커뮤니티에 도움이되기를 바랍니다. 시간을내어 게시했습니다!

최고 감사들,

Randika

+1

이것이 최고의 해결책입니다 .Don't 왜 많은 upvotes을 가지고 있지 않은지 알아. 감사합니다 남자 – jayadevkv

관련 문제