angular使用_HttpClient或者Fetch发送POST/GET请求下载/上传文件
一:下载文件写法
1.post请求_HttpClient写法、
myTest() {
const params = { aa: "aa", bb: "bb" }; // body的参数
const url = 'http://10.10.10.22:8080/sss'
const queryParams = undefined; // url query的参数
this.http.post(url, params, queryParams, {
responseType: "blob",
headers: new HttpHeaders().append("Content-Type", "application/json")
}).subscribe(res => {
// res: 文件流
this.downloadFile(res);
})
}
/**
* 创建blob对象,并利用浏览器打开url进行下载
* @param data 文件流数据
*/
downloadFile(data) {
// 下载类型 xls
const contentType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
// 下载类型:csv
// const contentType2 = 'text/csv';
const blob = new Blob([data], { type: contentType });
const url = window.URL.createObjectURL(blob);
// 打开新窗口方式进行下载
// window.open(url);
// 以动态创建a标签进行下载
const a = document.createElement('a');
const fileName = 'file';
a.href = url;
a.download = fileName + '.xlsx';
a.click();
window.URL.revokeObjectURL(url);
}
2.post请求使用Fetch 写法、
requestData = {
aa: aa,//這個給的是勾選的no列表
bb: bb
}
//下载execl文件
fetch(url, {
method: "POST",
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(requestData)
})
.then(res => res.blob())
.then(data => {
this.showSpin = false;
let blobUrl = window.URL.createObjectURL(data)
const a = document.createElement('a')
a.style.display = 'none';
a.setAttribute('target', '_blank');
a.download = '<List>';
a.href = blobUrl;
a.click();
})
3.GET请求第一种写法、
let url = `${BaseUrl.path}/aa/bb/cc?no=${this.sqcode}&pae=${this.wlName}&ase=${this.setDate(this.data[0])}&eae=${this.setDate(this.data[1])}&esy=${this.empId}&aay=${this.sqName}`;
const a = document.createElement('a')
a.style.display = 'none';
a.setAttribute('target', '_blank');
a.href = url;
a.click();
4.GET请求第二种写法、
myExport() {
var elemIF = document.createElement('iframe');
elemIF.src = myUrl.myParticleBaseUrl + '/qqq/file?aaa=vvvvvfl';
elemIF.style.display = 'none';
document.body.appendChild(elemIF);
},
二:上传文件的写法
三:VUE中上传一个文件给后端,后端返回另一个文件下载
<template> <div> <!-- 導入 --> <a href="javascript:;" class="button_s my_file el-button button_s el-button--primary el-button--small" > <input id="upload" type="file" class="my_input" @change="importExcel" />上傳111 </a> <!-- 導入 --> </div> </template> <script> import axios from 'axios' export default { data() { return {} }, mounted() {}, methods: { async importExcel(e) { const files = e.target.files if (files.length <= 0) { return false } else if (!/\.(xlsx)$/.test(files[0].name.toLowerCase())) { alert('上传格式不正确,请上传xlsx格式') return false } this.fileName = files[0].name // 如果要發送後端處理,這個代碼1 const url1 = 'http://10.10.10.10:8088/abc' const myformdataFile = new FormData() myformdataFile.append('file', e.target.files[0], 'a.xlsx') axios .post(url1, myformdataFile, { 'responseType': 'blob', 'Content-Type': 'application/json' }) .then(({ data }) => { const contentType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' // 下载类型:csv // const contentType2 = 'text/csv'; const blob = new Blob([data], { type: contentType }) const url = window.URL.createObjectURL(blob) // 以动态创建a标签进行下载 const a = document.createElement('a') const fileName = 'file' a.href = url a.download = fileName + '.xlsx' a.click() window.URL.revokeObjectURL(url) }) var input = document.getElementById('upload') input.value = '' } // 導入 } } </script> <style lang="less" scoped> </style>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
2019-06-01 使用iframe引入文件后设置响应式宽高以及其他问题解决;
2019-06-01 absolute定位后居中的方法