C#实现从服务器下载文件
C#实现从服务器下载文件(以Excel为例)前端用vue,后端C#。写一个前端点击下载,从服务器上下载指定Excel:1、在网上查了半天,永远是那四种方法。1.1、在此说明下我的查代码历程:1.1.1、不是说那四种方法不好,实在是我不会用,关键是我是第一次接触C#,用VS2019写程序。用的目标框架是.NET Standard 2.0;1.1.2、那四种方法里用到了Response对象,这需要将目
·
C#实现从服务器下载文件(以Excel为例)
前端用vue,后端C#。写一个前端点击下载,从服务器上下载指定Excel:
后端文件存放:
后端接口:
public Stream DownloadTemplate(string name)
{
//获取文件存放URL
var filePath = Path.Combine(Directory.GetCurrentDirectory(),path2:$"import_templates\\import_templates_{name}.xls");
using (var client = new WebClient())
{
client.DownloadFile(filePath, name);
return FileToStream(name, true);
}
}
public static Stream FileToStream(string fileName, bool isDelete = false)
{
//打开文件
FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read);
// 读取文件的 byte[]
byte[] bytes = new byte[fileStream.Length];
fileStream.Read(bytes, 0, bytes.Length);
fileStream.Close();
// 把 byte[] 转换成 Stream
Stream stream = new MemoryStream(bytes);
if (isDelete)
{
File.Delete(fileName);//删除临时文件
}
return stream;
}
前端代码:
接口文件:(.js文件)
// 文件导入接口定义
let url = '/api/app/commonFileImport';
import qs from 'qs';
export default class Api {
constructor(axios) {
this.axios = axios || null;
}
async downloadTemplate(name){
return await this.axios({
url: `${url}/downloadTemplate`,
responseType:'arraybuffer',
method: 'post',
params: {name},
});
}
}
前端文件(.jsx文件)
import ApiFileImport from '../../sm-api/sm-fileImport/fileImport'; //引用接口文件
let fileImport = new ApiFileImport();
export default {
name: 'SmImportTemplate',
components: {},
props: {
axios: { type: Function, default: () => null },
...,
downloadKey: { type: String, default: null }, // 下载指定文件的标识,唯一
downloadFileName: { type: String, default: null}, // 下载指定文件的标识,唯一
},
method: {
//这是实现方法:
async download() {
let response = await fileImport.downloadTemplate(this.downloadKey); //调接口
if (response != null && requestIsSuccess(response)) {
if (response.data.byteLength != 0){
//这里downloadFileName和downloadKey都是这个组件从父组件接收的,前者是下载完的文件名,后者是传给后端的标识。
FileSaver.saveAs(new Blob([response.data], { type: this.fileType }), `${this.downloadFileName}` ? `${this.downloadFileName}` : `${this.downloadKey}`);
this.$emit('success');
}
}
}
},
};
接口文件中接口配置:
responseType:'arraybuffer'
, 这个不能少,否则下下来的东西是乱码的。
下载文件:
FileSaver.saveAs(new Blob([response.data], { type: this.fileType }), ${this,downloadKey}
);
response.data
是我返回来的文件流;this.fileType
是文件类型,我定义的是’application/vnd.ms-excel’。最后那个就是下载完的文件名。
解决这个问题时碰到了如何更改目标框架的问题,详细如下:
在官网下载相应的框架,更改项目配置文件(我用的是VS2019):
//双击项目进入项目.csproj文件中:(右击项目 - 卸载项目 好像也能进这个文件)
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework> //这个是.NET Standard 2.0
//<TargetFramework>net40</TargetFramework> 这个是.NET Framework 4.0
<RootNamespace>SnAbp.Common</RootNamespace>
</PropertyGroup>
更改完之后右击项目——属性——目标框架,选择需要的就行。
好像一般改了之后会报很多问题(我的是出现了问题,很多不兼容。)
更多推荐
已为社区贡献1条内容
所有评论(0)