Tôi tạo một pdf với văn bản và hình ảnh bằng cách sử dụng thư viện javascript jsPDF. Sau đó, tôi muốn gửi tập tin đến máy chủ để gửi một email với nó. Vấn đề là tệp đến trên máy chủ bị hỏng và không thể mở được hoặc tôi không thể nhìn thấy hình ảnh trên pdf.jsPDF - gửi bản pdf đến máy chủ bị hỏng
Mã của tôi:
var pdf = btoa(doc.output());
- điều này mang lại một lỗi: 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);
Tôi cũng đã cố gắng những thứ khác như:
var pdf = btoa(encodeURIComponent(doc.output('blob')));
- file không thể mở được
var pdf = btoa(doc.output('blob'));
- không thể mở tệp
var pdf = btoa(unescape(encodeURIComponent(doc.output())));
- các tập tin sẽ mở ra nhưng những hình ảnh là một số dòng màu xám
PS: Tôi đang sử dụng Laravel 5. Mã Server:
$data = base64_decode($_POST['data']);
$fname = "test.pdf";
$file = fopen("pdf/" .$fname, 'w');
fwrite($file, $data);
fclose($file);
SOLUTION:
js mã:
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);
});
mã máy chủ:
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";
}
Tôi đã thử điều này không có base64_decode trên chương trình phụ trợ nhưng nó không hoạt động .. Không có lỗi nhưng không có tệp nào. –
OK sau khi gỡ lỗi, có vẻ như khi tôi gửi blob đến máy chủ, tôi không có gì trong '$ _POST ['data']'. Nếu tôi gửi một chuỗi đơn giản thì nó hoạt động. Gửi 'doc.output ('blob')' không hoạt động .. –
Tìm được giải pháp từ câu trả lời của bạn, cảm ơn. Tôi đã cập nhật bài đăng với nó. –