2016-09-22 11 views
5

मैं जावास्क्रिप्ट जेएसपीडीएफ लाइब्रेरी का उपयोग कर पाठ और छवियों के साथ एक पीडीएफ उत्पन्न करता हूं। फिर मैं इसके साथ एक ईमेल भेजने के लिए फ़ाइल को सर्वर पर भेजना चाहता हूं। समस्या यह है कि सर्वर पर आने वाली फ़ाइल दूषित हो जाती है और इसे खोला नहीं जा सकता है या मैं पीडीएफ पर छवियों को नहीं देख सकता।जेएसपीडीएफ - सर्वर पर पीडीएफ भेजें दूषित

मेरे कोड: -: Uncaught InvalidCharacterError: Failed to execute 'btoa' on 'Window': The string to be encoded contains characters outside of the Latin1 range.

var pdf = btoa(encodeURIComponent(doc.output())); 
var data = new FormData(); 
data.append("data" , pdf); 
var xhr = new XMLHttpRequest(); 
xhr.open('post', '/url', true); 
xhr.send(data); 

मैं भी तरह अन्य बातों की कोशिश की:

var pdf = btoa(doc.output()); यह एक त्रुटि देता है

var pdf = btoa(encodeURIComponent(doc.output('blob'))); - फ़ाइल खोला नहीं जा सकता

var pdf = btoa(doc.output('blob')); - फ़ाइल को खोला नहीं जा सकता

var pdf = btoa(unescape(encodeURIComponent(doc.output()))); - फ़ाइल को खोलने जाएगा, लेकिन छवियों कुछ ग्रे लाइनों

पुनश्च हैं:

$data = base64_decode($_POST['data']); 
$fname = "test.pdf"; 
$file = fopen("pdf/" .$fname, 'w'); 
fwrite($file, $data); 
fclose($file); 

समाधान:

js कोड:

मैं Laravel 5. सर्वर कोड का उपयोग कर रहा
var blob = doc.output('blob'); 
var fd = new FormData(); 
fd.append('data', blob); 
$.ajax({ 
    type: 'POST', 
    url: '/url', 
    data: fd, 
    processData: false, 
    contentType: false 
}).done(function(data) { 
    console.log(data); 
}); 

सर्वर कोड:

if(!empty($_FILES['data'])){ 
    move_uploaded_file(
     $_FILES['data']['tmp_name'], 
     public_path() . '/test.pdf' 
    ); 
    return "Pdf was successfully saved."; 
} else { 
    return "No Data Sent"; 
} 

उत्तर

4

btoa ascii बाइट रेंज के साथ गड़बड़ है ... जावास्क्रिप्ट सभी चरित्र पकड़ नहीं सकता है। यही कारण है कि आपको FileReader के readAsBinaryString का उपयोग क्यों नहीं करना चाहिए ... स्ट्रिंग या ~ 3x बड़ी बेस 64 स्ट्रिंग के रूप में नहीं, बल्कि एक ब्लॉब, ऐरेबफर या टाइप किए गए सरणी के रूप में बाइनरी को सही तरीके से संभाल लें और यह

ठीक हो जाएगा
var blob = doc.output('blob') 
xhr.send(blob) 
+0

मैंने बैकएंड पर कोई बेस 64_डेकोड नहीं किया लेकिन यह काम नहीं करता .. कोई त्रुटि नहीं है लेकिन कोई फ़ाइल नहीं है। –

+0

कुछ डीबग के ठीक बाद ऐसा लगता है कि जब मैं सर्वर पर ब्लॉब भेजता हूं तो मेरे पास '$ _POST ['data']' में कुछ भी नहीं है। अगर मैं एक साधारण स्ट्रिंग भेजता हूं तो यह काम कर रहा है। 'Doc.output ('blob') भेज रहा है 'काम नहीं कर रहा है .. –

+0

आपके उत्तर से समाधान मिला, धन्यवाद। मैंने इसके साथ पोस्ट अपडेट किया। –

संबंधित मुद्दे