Tôi đang gặp sự cố khi cố gắng phân phát tệp .docx bằng Php. Khi tải lên tệp, tôi phát hiện loại tệp mime và tải lên tệp bằng tệp có phần mở rộng chính xác dựa trên loại mime; ví dụ. bên dưới:Cung cấp các tệp .docx qua Php
application/msword - doc
application/vnd.openxmlformats-officedocument.wordprocessingml.document - docx
Khi cố gắng phân phối tệp để tải xuống, tôi làm ngược lại trong việc phát hiện tiện ích mở rộng và phân phối dựa trên loại mime ví dụ:
public static function fileMimeType($extention) {
if(!is_null($extention)) {
switch($extention) {
case 'txt':
return 'text/plain';
break;
case 'odt':
return 'application/vnd.oasis.opendocument.text';
break;
case 'doc':
return 'application/msword';
break;
case 'docx':
return 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';
break;
case 'jpg':
return 'image/jpeg';
break;
case 'png':
return 'image/png';
break;
case 'pdf':
return 'application/pdf';
break;
default:
break;
}
}
}
Tất cả các file xuất hiện để tải một cách chính xác và mở tốt nhưng khi cố gắng mở một file docx, Word (trên nhiều file) ném một lỗi nêu các tập tin bị hỏng.
Bất kỳ ý tưởng nào cũng tuyệt vời, cảm ơn.
Chỉnh sửa # 1
try {
$file = new Booking_Document((int)$get_data['bookingDocument']);
header('Content-Type: ' . Booking_Document::fileMimeType($file->getDocumentType()));
header('Content-Disposition: attachment; filename=' . $file);
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
echo readfile(Zend_Registry::get(static::$_uploadDir).$this->_id);
} catch (Exception $e) {
View_Helpers_FlashMessages::addMessage(array('message' => $e->getMessage(), 'type' => 'error'));
}
exit;
FIXED
Trước khi gọi readfile() tôi đã thêm ob_clean() và flush() mà dường như đã cố định vấn đề.
'trường hợp ('jpg' || 'jpeg'):' không hoạt động, bạn cần viết 'case' jpg ': case' jpeg ': '. – deceze
Câu hỏi tương tự, có thể trợ giúp: http://stackoverflow.com/questions/179315/downloading-docx-from-ie-setting-mime-types-in-iis – kapa
Kết quả bạn nhận được ở phía khách hàng là gì? Đây có phải là tệp hợp lệ khi được lưu vào đĩa không? – deceze