2010-02-11 43 views
7

Trong ứng dụng của tôi, tôi muốn cung cấp cơ sở tải xuống tệp. Tôi đặt các loại tệp thành response.setContentType. Làm cách nào để đặt loại nội dung cho hầu hết các loại tệp đã biết? Có cách nào dễ dàng không? hoặc tôi cần phải thiết lập nó bằng tay như tôi làm bây giờ, được đưa ra dưới đây.đặt loại nội dung trong java để tải xuống tệp

if (pictureName.indexOf("jpg") > 0) { 
    res.setContentType("image/jpg"); 
} else if (pictureName.indexOf("gif") > 0) { 
    res.setContentType("image/gif"); 
} else if (pictureName.indexOf("pdf") > 0) { 
    res.setContentType("application/pdf"); 
    res.setHeader("Content-Disposition", "inline; filename=\"" + pictureName + "\""); 
} else if (pictureName.indexOf("html") > 0) { 
    res.setContentType("text/html"); 
} else if (pictureName.indexOf("zip") > 0) { 
    res.setContentType("application/zip"); 
    res.setHeader("Content-Disposition", "attachment; filename=\"" + pictureName + "\""); 
} 

Cảm ơn :)

+0

chứa của bạn (ví dụ Tomcat) thường cung cấp logic này ví dụ như http: // www.developershome.com/wap/wapServerSetup/tutorial.asp?page=settingUpMIME - bạn có muốn ghi đè điều này không? – Pool

+1

Câu hỏi hay. Đề xuất: Đừng nói "vui lòng trợ giúp". Mọi người ở đây để giúp đỡ (và học hỏi từ câu hỏi của người khác cũng như của riêng họ), không cần phải nhấn điểm. Tôi đã nhìn thấy mọi người (không thích hợp, theo quan điểm của tôi!) Thực sự làm giảm số người chỉ để nói "Hãy giúp đỡ" và như vậy. Lạ lùng nhưng đúng. –

+2

Tắt chủ đề: Mã đó hơi mỏng manh, phải không? Điều gì sẽ xảy ra nếu 'pictureName' là" gifford.pdf "? –

Trả lời

9

Hãy xem javax.activation.MimetypesFileTypeMap (đi kèm như một phần của Java6, có thể được tải về phiên bản trước). Nó có một phương thức trả về loại mime cho một tên tệp đã cho.

Tôi chưa bao giờ tự mình thử sử dụng nó và có thể bạn vẫn cần phải cung cấp cho nó một danh sách các loại mime. Đáng xem, mặc dù.

+1

thử nghiệm trên tôi Mac OS X 10.5.8, Java 1.6.0_17, mới MimetypesFileTypeMap() getContentType (filename) sản xuất các kết quả này: ảnh x.jpg/jpeg, x.jpeg image/jpeg, x. gif image/gif, x.pdf application/octet-stream, x.html văn bản/html, x.zip application/octet-stream. [Ack, định dạng không hợp lệ làm nhận xét. Tôi có nên đăng bài này dưới dạng câu trả lời riêng hoặc người nào đó có thể chỉnh sửa câu trả lời trong câu hỏi này không?] –

+0

@Kevin: Tôi không chắc chắn, bạn có ủng hộ câu trả lời của tôi hay không đồng ý với câu trả lời đó không? :) – skaffman

+0

Cố gắng cung cấp dữ liệu về cách hoạt động của giải pháp này. Không có ý kiến, thực sự. –

0

URLConnection.getFileNameMap().getContentTypeFor(string) hoạt động cho txt, pdf, avi; không cho doc, odt, mp3 ...

1

Để đưa ra một ví dụ làm việc của những gì @skaffman niêm yết khi sử dụng một Servlet:

 String fileName = "c:/temp/URL.txt"; 
     MimetypesFileTypeMap mimetypesFileTypeMap=new MimetypesFileTypeMap(); 
     response.setContentType(mimetypesFileTypeMap.getContentType(fileName)); 
     response.getOutputStream().write(Files.readAllBytes(Paths.get(fileName))); 
Các vấn đề liên quan