ChatGPT解决这个技术问题 Extra ChatGPT

Setting mime type for excel document

MS Excel has the following observed MIME types:

application/vnd.ms-excel (official)

application/msexcel

application/x-msexcel

application/x-ms-excel

application/x-excel

application/x-dos_ms_excel

application/xls

application/x-xls

application/vnd.openxmlformats-officedocument.spreadsheetml.sheet (xlsx)

Is there any one type that would work for all versions? If not, do we need to set response.setContentType() with each one of these mime types individually?

Also, we use file streaming in our application to display document (not just excel - any type of document). In doing so, how can we retain the filename if the user opts to save the file - currently, the name of the servlet that renders the file appears as the default name.

More generally, the best way to find out what MS themselves think is the correct type is to find a box with the latest version installed and look at HKCR/.xls 's Content Type value in the registry.
"application/vnd.ms-office" is another mime type for XLS files.
application/vnd-xls also works for .xls files.
Please refer to this post for complete list of MIME types and related excel file extensions.
The standard excel MIME type is:- application/vnd.ms-excel

C
Callum Watkins

I believe the standard MIME type for Excel files is application/vnd.ms-excel.

Regarding the name of the document, you should set the following header in the response:

header('Content-Disposition: attachment; filename="name_of_excel_file.xls"');

what is the difference between application/msexcel and application/vnd.ms-excel?
If you're wanting to display the document within the browser (if supported) then Content-Disposition needs to be 'inline'. See stackoverflow.com/questions/1395151/…
You should avoid using Content-Disposition in HTTP, it has security considerations. Content-Disposition is only for email. See stackoverflow.com/questions/1012437 for more info.
Note that for OpenXML Excel XLSX file format a different Mime type is defined, see the full list at the link provided.
@DzmitryLazerka what is the "secure" alternative to content-disposition? Following your link, then the link in that answer, then the link in that document, gets us to here: tools.ietf.org/html/rfc6266#section-4.3. As far as I can tell, the security concern is just involving filenames provided by users--if they contain non-latin characters, or characters that are invalid on some OS. All the major browsers have safeguards against these concerns. Windows and Mac also set a flag on a file indicating that it came from the internet, popping up a warning when you try to open it.
D
Dave Jarvis

Waking up an old thread here I see, but I felt the urge to add the "new" .xlsx format.

According to http://filext.com/file-extension/XLSX the extension for .xlsx is application/vnd.openxmlformats-officedocument.spreadsheetml.sheet. It might be a good idea to include it when checking for mime types!


This was what I was looking for thanks, needed to support the latest format as well as the previous.
D
Du-Lacoste

For .xls use the following content-type

application/vnd.ms-excel

For Excel 2007 version and above .xlsx files format

application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

A
Aleksei Matiushkin

I was setting MIME type from .NET code as below -

File(generatedFileName, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")

My application generates excel using OpenXML SDK. This MIME type worked -

vnd.openxmlformats-officedocument.spreadsheetml.sheet

V
Vishwajit G

I am using EPPlus to generate .xlsx (OpenXML format based) excel file. For sending this excel file as attachment in email I use the following MIME type and it works fine with EPPlus generated file and opens properly in ms-outlook mail client preview.

string mimeType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
System.Net.Mime.ContentType contentType = null;
if (mimeType?.Length > 0)
{
    contentType = new System.Net.Mime.ContentType(mimeType);
}

b
be_es

For anyone who is still stumbling with this after using all of the possible MIME types listed in the question:

I have found that iMacs tend to also throw a MIME type of "text/xls" for XLS Excel files, hope this helps.