2017-03-16 8 views
0

jspdfを使ってajaxとdjangoでpdf添付のメールを送信する際に問題があります。問題はサーバー側です。views print(pdf_s)常に再実行'なし'でもクライアント側console.log(pdf)はバイナリ値を返します。AjaxとDjangoのpythonを使ってJsPDFを使ってPDF添付のメールを送信してください

私が試した以下のコードを参照してください。

script.js

これは、クライアント側のコードです。そして私>は、ブラウザのdevのツールを介してサーバ

function sendMail(){ 
    getCanvas().then(function(canvas) { 
     console.log('Test'); 
     var img = canvas.toDataURL("image/png",0.98); 
     var imgWidth = 200; 
     var pageHeight = 295; 
     var imgHeight = canvas.height * imgWidth/canvas.width; 
     var heightLeft = imgHeight; 

     var doc = new jsPDF('p', 'mm', 'a4', 'pt'); 
     var position = 0; 

     doc.addImage(img, 'JPEG', 5, position, imgWidth, imgHeight); 
     heightLeft -= pageHeight; 

     while (heightLeft >= 0) { 
      position = heightLeft - imgHeight; 
      doc.addPage(); 
      doc.addImage(img, 'JPEG', 5, position, imgWidth, imgHeight); 
      heightLeft -= pageHeight; 
     } 
     var pdf = btoa(doc.output()); 
     console.log(pdf); 
     $.ajax({ 
      type:'POST', 
      url:'sendmail/', 
      data:{ 
       pdf_data: pdf, 
       csrfmiddlewaretoken: csrftoken 
      }, 
      success:function(data){ 
       console.log(data); 
      } 

     }); 
    }); 
} 

views.py

def SendMail(request,scan_id): 

    pdf_s = request.GET.get('pdf_data') 
    print(pdf_s) 
    fo = open('test.pdf','w') 
    fo.write(pdf_s) 
    fo.close() 

    html_content = "Test Message" 
    email = EmailMessage("test", html_content, "test", ["[email protected]"]) 
    email.content_subtype = "html" 

    fd = open('test.pdf', 'r') 
    email.attach('test', fd.read(), 'application/pdf') 

    res = email.send() 
    if res: 
     status = 'Success' 
    else: 
     status = 'Fail' 
    return HttpResponse(status) 

答えて

0

チェックAJAX要求にネットワークデータを送信するためのAjaxを使用しています。 「pdf_data」パラメータが存在しない可能性があります。

ネイティブjs経由でファイルを送信します。

JS

var formData = new FormData(); 
formData.append('file.pdf', file); 
var xhr = new XMLHttpRequest(); 
xhr.onload = function (e) { 
    if (xhr.readyState === 4 && xhr.status === 200){ 
     result=xhr.responseText; 
     console.log(result); 
    } 
} 
xhr.open('POST', url, true); 
xhr.setRequestHeader("X-CSRFToken", csrfmiddlewaretoken); 
xhr.send(formData); 

Pythonの

element_file=File(request.FILES[request.FILES.keys()[0]]) 
with open('file.pdf','wb+') as destination: 
    for chunk in element_file.chunks(): destination.write(chunk) 

入力タイプ= "ファイル"

を介してローカルコンピュータからファイルを送信する場合、それはケースでの作業です
関連する問題