2017-03-16 81 views
0

我有一个问题,发送pdf附加电子邮件使用jspdf与ajax和Django。问题是服务器端views.py 打印(pdf_s)总是反弹'无'但客户端console.log(pdf)返回二进制值。发送PDF附加电子邮件使用jsPDF ajax和Django python

请参考我试过的下面的代码。

的script.js

这是客户端的代码。和我使用Ajax来通过浏览器开发者工具将数据发送到服务器

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请求>网络。也许“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) 

它在工作的情况下,如果通过输入类型= “文件” 从本地计算机发送文件

相关问题