JAVAやExcelで
PDFやExcel、Wordを作成し出力する際に、パソコン側では問題なくダウンロードするのにiPhone、iPadで実行するとうまく表示してくれない場合があります。
原因
MIME TYPEがヘッダーに設定されていない、もしくはMIME TYPEの指定に誤りがあるとうまく開いてくれないようです。
上記ファイルはExcel2007以降のファイル(xlsx)のため【Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet】とヘッダーに指定してあげるとうまくいくようです。
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
/* 以下出力処理 /
//JavaDriveさんのコードを引用させていただいてます。
import java.io.;
import javax.servlet.*;
import javax.servlet.http.*;
public class Sample extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
/* 以下出力処理 */
}
}
うまく開くことができました。
octet-streamだとどうなるか
ダウンロード処理をさせるために【application/octet-stream】を設定しているサイトも多いと思いますが、iPhone、iPadではExcelファイルの表示をしてくれませんでした。
また、xlsxなのにxlsのMIME TYPEを設定しても表示できないようです。
適切なMIME TYPEの設定が必要
モバイル端末を使用しているユーザも対象にするなら適切なMIME TYPEを設定する必要があるのでシステム構築する&テストする際は注意が必要ですね。
Androidの場合はダウンロードマネージャがファイルをダウンロードしてくれるようなのでMIME TYPEを設定してなくても開けるようです。
MIME TYPE
形式 | 拡張子 | MIME TYPE |
---|---|---|
Excel 2003 | xls xlm | application/vnd.ms-excel |
Excel 2007 | xlsx | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet |
Excel 2007(マクロ有) | xlsm | application/vnd.ms-excel.sheet.macroEnabled.12 |
Word 2003 | doc | application/msword |
Word 2007 | docx | application/vnd.openxmlformats-officedocument.wordprocessingml.document |
Word 2007(マクロ有) | docm | application/vnd.ms-word.document.macroEnabled.12 |
PowerPoint 2003 | ppt | application/vnd.ms-powerpoint |
PowerPoint 2007 | pptx | application/vnd.openxmlformats-officedocument.presentationml.presentation |
PowerPoint 2007(マクロ有) | pptm | application/vnd.ms-powerpoint.presentation.macroEnabled.12 |
application/pdf |
参考サイト
・JavaDrive:コンテンツタイプの設定(setContentType)