2015-09-01 8 views
7

का उपयोग कर मैं एक पीडीएफ मैं दृश्यपटल जावास्क्रिप्ट एक स्प्रिंग फ्रेमवर्क MVC बैकएंड में jsPDF का उपयोग करने पर जेनरेट किया है पारित करने के लिए प्रयास कर रहा हूँ। नीचे सामने के छोर कोड मैं लिखा है है:अपलोड कर रहा है पीडीएफ बाइनरी डेटा

var filename = "thefile"; 
var constructURL = '/daas-rest-services/dashboard/pdfPrintUpload/' + filename; 
var url = restService.getUrl(constructURL); 
var fileBytes = btoa(pdf.output()); 
$http.post(url, fileBytes).success(function(data) { 
    console.log(data); 
    }) 
    .error(function(e, a) { 
    console.log(e); 
    console.log(a); 

    }); 

पीडीएफ चर ठीक से तैयार की गई है और इस बात की पुष्टि कर सकते हैं सही ढंग से खुलता है जब pdf.save ("फ़ाइल नाम") बुला। नीचे जावा कोड जो इस कॉल के लिए स्प्रिंग MVC बैकएंड पर लिखा गया है है:

त्रुटि 400:

@RequestMapping(method = RequestMethod.POST, value = "/pdfPrintUpload/{documentName}") 
public @ResponseBody String postPrintDocument(@PathVariable String documentName, @RequestParam byte[] fileBytes) { 
    String methodName = "postPrintDocument"; 
    if(logger.isLoggable(Level.FINER)){ 
     logger.entering(CLASS_NAME, methodName);    
    } 
    String check; 
    if(fileBytes != null){ 
     check = "not null"; 
    } else { 
     check = "null "; 
    } 
    //Decoding the bytestream 
    //Save to file location 
    //return file location 
    String returnValue = "HI " + documentName + " " + check; 
    if (logger.isLoggable(Level.FINER)) { 
     logger.exiting(CLASS_NAME, methodName); 
    } 
    return returnValue; 
} 

हर बार जब मैं एक अनुरोध करते हैं, मैं 400 त्रुटियाँ मुझे बता रही आवश्यक बाइट [] पैरामीटर ' fileBytes '

मैं अनुरोध पेलोड कि डेटा की एक बड़ी राशि प्रेषित किया जा रहा है में पुष्टि कर सकते हैं, फिर भी बैकएंड पैरामीटर स्वीकार करना चाहते प्रतीत नहीं होता है मौजूद नहीं है।

ऐसा करने का उद्देश्य है कि मैं पीडीएफ से डेटा प्राप्त करें और फिर बैकएंड पर यह डिकोड तो मैं बाद में सर्वर पर किसी स्थान पर पीडीएफ प्रकाशित कर सकते हैं करने में सक्षम होना चाहते हैं। वहाँ कुछ मैं अपने कोड में याद आ रही है इन अनुरोधों में नाकाम रहने रखने के लिए के लिए है, और वहाँ एक आसान अधिक कुशल तरीका इस कार्यक्षमता को प्राप्त करने के लिए है?

उत्तर

4

का उपयोग करके देखें समाधान @RequestBody को @RequestParam बदल रहा था लिंक और उदाहरण लिंक

ng-file-upload

Sever साइड कोड के लिए पर उपलब्ध हैं। @RequestParam एक पैरामीटर जो रास्ते में भेजा जाता है। @RequestParam vs @PathVariable

3

एनजी-फ़ाइल-अपलोड का उपयोग कर प्रयास करें। इस

@RequestMapping(value = "/pdfPrintUpload") 
    @ResponseBody 
    public void postPrintDocument(@RequestParam("file") MultipartFile file) { 

      InputStream is = file.getInputStream(); 
      OutputStream os = new FileOutputStream(/*path to save file*/); 
      byte[] buffer = new byte[1024]; 
      int length; 
      while ((length = is.read(buffer)) > 0) 
       os.write(buffer, 0, length); 
      is.close(); 
      os.close(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
संबंधित मुद्दे