我使用django与vue3搭建项目,给出后端读取pdf文件并上传至前端供用户下载的完整代码
时间: 2024-12-13 13:25:35 浏览: 11
在Django后端和Vue3前端结合的项目中,处理PDF文件通常涉及两个部分:后端文件操作和前端文件下载。这里提供一个简化版的示例,但请注意这只是一个基本框架,实际项目中需要考虑更多的错误处理和安全性。
**后端(Django)代码 - views.py:**
```python
from django.http import FileResponse
import os
import pdfkit
def download_pdf(request):
# 指定要生成的PDF路径和内容
pdf_data = "your_pdf_content_here" # 这里通常是通过某个视图函数从数据库获取的数据
file_name = 'example.pdf'
# 使用pdfkit将数据转为PDF
pdf_path = '/tmp/' + file_name
pdfkit.from_string(pdf_data, pdf_path)
# 将临时PDF文件作为响应返回给前端
with open(pdf_path, 'rb') as f:
response = FileResponse(f.read(), content_type='application/pdf')
response['Content-Disposition'] = 'attachment; filename={}'.format(file_name)
return response
```
**后端(Django)代码 - urls.py:**
```python
from . import views
urlpatterns = [
path('download-pdf/', views.download_pdf, name='download_pdf'),
]
```
**前端(Vue3)代码 - script.js 或者 Axios 请求:**
```javascript
axios.post('/api/download-pdf', {}).then((response) => {
// 检查是否成功,然后创建下载链接
if (response.status === 200) {
const blob = new Blob([response.data], { type: 'application/pdf' });
const url = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = response.headers['content-disposition'].split(';')[1].replace(/"/g, '');
a.click();
} else {
console.error('Failed to download PDF:', response.data);
}
}).catch((error) => {
console.error('Error:', error);
});
```
记得替换`your_pdf_content_here`为实际生成PDF的内容,并根据需求调整文件名、URL路径等。
阅读全文