2012-02-06 15 views
7

Vâng, tôi tin rằng đây không phải là một vấn đề CodeIgniter cho mỗi gia nhập vì nó là nhiều hơn một mime-type.Tải lên xls hoặc file xlsx với CodeIgniter, mime-type lỗi

Tôi đang cố gắng để tải lên một tập tin, một xls (hoặc xlsx) tập tin và mime-type trình duyệt và báo cáo php là application/octet-stream thay vì application/trội, application/vnd.ms-excel hoặc ứng dụng/msexcel cho tệp xls. Tất nhiên plugin tải lên codeigniter sẽ báo cáo lỗi (loại tệp không hợp lệ) vì nó cố khớp với đuôi tệp bằng loại mime.

Điều lạ lùng (est) có thể là mã tương tự đã hoạt động trong nhiều tháng và hiện đã ngừng hoạt động với Chrome (16.0.912.77), Firefox (10.0) và IE9 mới nhất.

Có ai có cùng vấn đề và sự quan tâm chia sẻ giải pháp không?

Cảm ơn bạn rất nhiều. PS: Tôi sẽ không cung cấp mã vì nó không thực sự là vấn đề về mã, nhưng nếu cần, tôi sẽ tải lên một số đoạn mã.

EDIT

Nó có thể là có liên quan: lỗi không xảy ra với cùng một trình duyệt trên một cấu hình tương tự, nhưng với MS Office thay vì LibreOffice (trên pc của tôi). Nó không xảy ra trên hệ thống GNU + Linux dựa trên + Libre Office. SO, nó có thể được Windows playin 'cứng trên bộ nguồn mở, hoặc Văn phòng Libre thay đổi các loại mime chỉ cho heck của nó?

Trả lời

9

Tôi cũng nhận được lỗi này.

CI đang báo cáo loại tệp 'ứng dụng/zip' có ý nghĩa như định dạng xlsx là định dạng nén (đổi tên thành zip và bạn có thể mở nội dung).

Tôi đã thêm/thay thế các dòng sau vào tập tin kiểu MIME (application/config/mimes.php):

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

và làm việc (đối với trình duyệt này ít nhất!)

+0

hmmm, nó có thể giải quyết được vấn đề, nhưng nó sẽ cho phép các tệp .zip không phải là tệp xlsx được tải lên, nếu tôi không nhầm. –

+0

Vâng, tôi nghĩ rằng ban đầu, nhưng CI thực hiện kiểm tra phần mở rộng tập tin VÀ loại mime, vì vậy nếu bạn thử tải lên một tệp zip, vì phần mở rộng là zip và không xlsx nó ném một lỗi. Tôi cũng đã thêm các dòng sau vào tệp mimes.php cho công việc tôi đã thực hiện: 'slk' => 'text/plain', 'xlsx' => mảng ('application/vnd.openxmlformats -officedocument.spreadsheetml.sheet ',' application/zip '), ' ods '=>' application/octet-stream – Stevo

+0

điều gì về tệp zip có đuôi xlsx (và không phải là tệp xlsx hợp lệ)? –

2

Đây là lỗi CI vài tháng trước: https://github.com/EllisLab/CodeIgniter/issues/394. mimes.php trong khung công tác đã được cập nhật và lỗi đã được giải quyết. Cập nhật thư viện CodeIgniter của bạn thành 2.1.0 (hoặc mới hơn).

Cũng là một điều tốt để kiểm tra/kết xuất là loại máy chủ mime của bạn.

Một cách khác là buộc loại mime. Với .htaccess, đó sẽ là

AddType application/excel .xls .xlsx 

Đối với một cuộc phiêu lưu hoàn toàn gỡ lỗi, kiểm tra tập tin văn phòng khác nhau với get_mime_by_extension($file) với File Helper (http://codeigniter.com/user_guide/helpers/file_helper.html)

+0

Cảm ơn bạn đã trả lời của bạn. Thật không may tôi đã sử dụng CI 2.1.0, do đó, vấn đề không thể (không nên) được điều đó. Tôi đã thử nghiệm $ _FILES [$ field] ['tmp_name'] và nó cũng là "application/octet-stream". Điều kỳ lạ nhất là chỉ xảy ra trên máy của tôi. Sau đó tôi đã thử nghiệm trong cùng một trình duyệt và hệ điều hành trên một máy khác, (sự khác biệt duy nhất sẽ là Libre Office (trên máy tính của tôi) và MS Office trên khác) và nó hoạt động tốt. Cũng được thử nghiệm trong một hệ điều hành dựa trên Linux với Libre Office cài đặt, và nó làm việc độc đáo quá. Tôi sẽ thử aacach .htaccess. Cảm ơn bạn. –

+0

Vâng. Đã thử .htaccess aproach. Không có gì. Tôi có thể sẽ cung cấp cho vấn đề này một phần còn lại, như là ứng dụng cho một sử dụng nội bộ cho một khách hàng gần gũi, và nó làm việc ok cho họ. Dù sao, tôi rất thích tìm nguyên nhân của vấn đề này, nếu không, tôi sẽ chấp nhận câu trả lời của bạn. Nó có thể giúp người khác. –

2

Just cho các hồ sơ, tôi tìm thấy nguyên nhân, mime-type đã mất tích trên cửa sổ đăng ký, giải quyết thêm các phím này với a.reg file:

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" 

Nhưng muốn sử dụng các giải pháp ở trên, tôi không thích gây rối với registry.

4

Vui lòng xem qua Mô tả sau và gợi ý và nhận câu trả lời dễ dàng!

Mô tả:

Trên thực tế như nhiều người đã khuyên để thêm/thay thế các dòng sau trong file (application/config/mimes.php):

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


Nhưng tôi có nhận ra rằng trong CodeIgniter Phiên bản 2.2. * vấn đề có chút khác biệt! Họ đã thêm dòng đó rồi, nhưng quên để thêm sau "FILE_TYPE" ==> 'application/vnd.ms-excel'

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

Vì vậy, thêm trên 'application/vnd.ms-excel' vào mảng của xlsx loại tệp, hãy để tôi tải lên các tệp .xlsx!

Gợi ý:

Bất cứ khi nào bạn nhận được lỗi sau, trên CodeIgniter Platform, và các tập tin tải lên:

Các filetype bạn đang cố gắng để tải lên không được phép.

làm như sau trong phương pháp upload Kiểm Soát Tài Chính của bạn,

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

Và nó sẽ cung cấp cho bạn một mảng lớn mà bạn có thể có được một ý tưởng từ link này. (Xin vui lòng, xem kết thúc của trang đó) . Trong mảng đó, bạn có thể nhận được mime_type thực sự của tệp bạn đang cố gắng tải lên nhưng không cho phép bạn tải lên.

Trả lời:

Trong trường hợp của tôi, mở rộng tập tin của tôi là, .xlsx, và các loại mime đã application/vnd.ms-excel, mà đã không được thêm vào

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

Vì vậy, tôi đã thêm nó theo cách thủ công và sau đó nó hoạt động VERRY WELL !!!

Điều tương tự cũng xảy ra khi tải lên CSV một lần nữa, khi tôi đã kiểm tra tiện ích mở rộng tệp là .csv nhưng loại mime đã text/plain, khi tôi thêm nó vào dòng sau:

'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'); 

và lưu lại dưới dạng sau,

'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'), 

Nó hoạt động như một nét duyên dáng! : D Hãy thử nó, nếu bạn tìm thấy một cái gì đó mới trong các bước trên, xin vui lòng bình luận ở đây !!! Vì vậy, hy vọng điều này sẽ hữu ích cho tất cả cộng đồng CodeIgniter, tôi đã đăng nó một thời gian!

Trân trọng kẻ xuất sắc nhất,

Randika

+1

đây là giải pháp tốt nhất. Không biết tại sao nó không có nhiều upvotes.Thanks người đàn ông – jayadevkv

Các vấn đề liên quan