2011-10-04 17 views
8

का उत्पादन करता है मैं सीएक्सएफ और वसंत का उपयोग कर नया वेबस्टाइल बनाने के लिए नया हूं।रीस्टफुल बाइनरी फ़ाइल

यह मेरी समस्या है: मैं ऐसी सेवा बनाना चाहता हूं जो "किसी भी प्रकार की फ़ाइल (छवि, दस्तावेज़, txt या यहां तक ​​कि पीडीएफ), और एक एक्सएमएल भी उत्पन्न करे। अब तक मुझे यह कोड मिला है:

@Path("/download/") 
@GET 
@Produces({"application/*"}) 
public CustomXML getFile() throws Exception; 

मुझे नहीं पता कि कहां से शुरू करना है, इसलिए कृपया धैर्य रखें।

संपादित करें:

ब्रायंट Luk का पूरा कोड (धन्यवाद!)

@Path("/download/") 
@GET 
public javax.ws.rs.core.Response getFile() throws Exception { 
    if (/* want the pdf file */) { 
     File file = new File("..."); 
     return Response.ok(file, MediaType.APPLICATION_OCTET_STREAM) 
      .header("content-disposition", "attachment; filename =" + file.getName()) 
      .build(); 
    } 

    /* default to xml file */ 
    return Response.ok(new FileInputStream("custom.xml")).type("application/xml").build(); 
} 
+0

आपकी समस्या क्या है, यह समझाकर शुरुआत करने का प्रयास करें। अब तक, आपने केवल वर्णन किया है कि आपने क्या किया है, लेकिन आपने यह नहीं बताया है कि कोड कब चलता है, आपको किस त्रुटि का सामना करना पड़ता है, आदि –

+0

क्या आप फ्रेमवर्क को 'getFile() कॉल करने की कोशिश कर रहे हैं '/ डाउनलोड' के तहत हर अनुरोध के लिए, तो यह अनुरोधित फ़ाइल का उत्पादन कर सकता है? मैं * सोचता हूं * आप जो पूछ रहे हैं, उस मामले में, 'getFile()' के कार्यान्वयन का पता लगाया जा सकता है कि वास्तव में क्या अनुरोध किया गया था। – Wyzard

+0

@ वाईज़ार्ड हां, मुझे उम्मीद है कि कार्यान्वयन और एनोटेशन प्रकार के लिए बहुत कुछ नहीं पूछ रहा है –

उत्तर

15

यह किसी भी फाइल वापस आ जाएगी, तो आप अपने विधि अधिक "सामान्य" बनाने के लिए और एक javax.ws वापस जाने के लिए चाहते हो सकता है .rs.core.Response जो आप Content-Type हैडर प्रोग्राम के रूप में सेट कर सकते हैं:

@Path("/download/") 
@GET 
public javax.ws.rs.core.Response getFile() throws Exception { 
    if (/* want the pdf file */) { 
     return Response.ok(new File(/*...*/)).type("application/pdf").build(); 
    } 

    /* default to xml file */ 
    return Response.ok(new FileInputStream("custom.xml")).type("application/xml").build(); 
} 
0

हम भी CXF और स्प्रिंग का उपयोग करें, और यह मेरा बेहतर एपीआई है।

import javax.ws.rs.core.Context; 

@Path("/") 
public interface ContentService 
{ 
    @GET 
    @Path("/download/") 
    @Produces(MediaType.WILDCARD) 
    InputStream getFile() throws Exception; 
} 

@Component 
public class ContentServiceImpl implements ContentService 
{ 
    @Context 
    private MessageContext context; 

    @Override 
    public InputStream getFile() throws Exception 
    { 
     File f; 
     String contentType; 
     if (/* want the pdf file */) { 
      f = new File("...pdf"); 
      contentType = MediaType.APPLICATION_PDF_VALUE; 
     } else { /* default to xml file */ 
      f = new File("custom.xml"); 
      contentType = MediaType.APPLICATION_XML_VALUE; 
     } 
     context.getHttpServletResponse().setContentType(contentType); 
     context.getHttpServletResponse().setHeader("Content-Disposition", "attachment; filename=" + f.getName()); 
     return new FileInputStream(f); 
    } 
} 
संबंधित मुद्दे