1、安装Nuget依赖包:Microsoft.AspNetCore.StaticFiles
2、在Program.cs中注册中间件
app.UseStaticFiles();
3、将业务接口和实现类在Program.cs中注入到运行时
builder.Services.AddScoped<IModelServive,ModelServiveImpl>();
4、新建IModelServive接口,用于获取文件类型
using Microsoft.AspNetCore.Mvc;
namespace digitization_model.Service;
public interface IModelServive
{
String getFileType(String fileName);
}
5、定义接口实现类
using System.Net;
using Microsoft.AspNetCore.Http.HttpResults;
using Microsoft.AspNetCore.Mvc;
namespace digitization_model.Service.Impl;
public class ModelServiveImpl : IModelServive
{
public String getFileType(String fileName)
{
String extension = Path.GetExtension(fileName).ToLowerInvariant();
switch (extension)
{
case ".txt": return "text/plain";
case ".html": return "text/html";
case ".pdf": return "application/pdf";
case ".doc": case ".docx": return "application/msword";
case ".xls": case ".xlsx": return "application/vnd.ms-excel";
// 添加更多类型...
default: return "application/octet-stream";
}
}
}
6、定义控制器
using System.Runtime.InteropServices.JavaScript;
using digitization_model.Service;
using Microsoft.AspNetCore.Mvc;
namespace digitization_model.Controller;
[ApiController]
[Route("[controller]")]
public class ModelController : ControllerBase
{
private readonly IModelServive modelServive;
private readonly IWebHostEnvironment _env;
public ModelController(IModelServive modelServive,IWebHostEnvironment _env)
{
this.modelServive = modelServive;
this._env = _env;
}
[HttpGet("getFileUrl/modelFilePath/{modelFilePath}/fileName/{fileName}")]
public IActionResult getFileUrl(String modelFilePath,String fileName)
{
try
{
string filePath = Path.Combine(_env.WebRootPath+"/"+modelFilePath, fileName);
if (!System.IO.File.Exists(filePath))
{
return NotFound(); // 如果文件不存在,返回404
}
// 获取文件类型并设置Content-Type
string contentType = modelServive.getFileType(fileName);
// 读取文件内容并作为附件发送,以便浏览器决定如何处理(预览或下载)
var fileStream = new FileStream(filePath, FileMode.Open);
return File(fileStream, contentType, fileName);
}
catch (Exception ex)
{
// 记录异常或处理错误
return StatusCode(StatusCodes.Status500InternalServerError, ex.Message);
}
}
}