【ASP.NET CORE】实现图片的上传与通过路径访问预览

主要需求

实现图片上传API,并将图片访问路由信息返回。将文件的信息存储到数据库中,文件存在项目目录下(也可以在服务器中创建一个目录用来存放文件)

编写文件上传接口

public interface IuploadService{
	string upload(IFormFile formfile);
}
public class UploadService : IuploadService{
	/*
	_env: IConfiguration
	_httpContextAccessor: IHttpContextAccessor
	*/
	
	public string upload(IFormFile formFile){
		// 首先将文件原本的名字改为按一定规律的数字编号(日期+时间+随机的八位数),作为文件ID使用,存储在数据库中
		Random ran = new Random(); // 实现随机
		
		string fileID =  Convert.ToDateTime().ToString("yyyyMMddHHmmss") + ran.Next(999999999);
		
		// 获得图片的文件类型(jpg、png....)
		string sufix = formFile.FileName.Substring(formFile.FileName.LastIndexOf('.'));
  	 	// 文件原本的名字
		string prefix = formFile.FileName.Substring(0,formFile.FileName.LastIndexOf('.'));
		// 文件上传之后分配到的名字(通过路径访问时,也是访问的这个)
		string fileName = fileID + sufix;
		// 文件上传后的存储路径
		var uploadPath = Path.Combine(_env.ContentRootPath + "/StaticFiles",fileName).Replace("\\","/");
		
		// 访问路径(动态获取IP和端口号)
		string address = string.Empty;
		// 获取ip
		foreach (IPAddress _IPAddress in Dns.GetHostEntry(Dns.GetHostName()).AddressList)
        {
        	if (_IPAddress.AddressFamily.ToString() == "InterNetwork")
                address = _IPAddress.ToString();
        }

		// 获取端口
		int port = _httpContextAccessor.HttpContext.Request.HttpContext.Connection.LocalPort;
		string url = "http://" + address + ":" + port;

		// 访问路径
		visitUri = Path.Combine(url + "/staticfile",fileName).Replace("\\","/");
		// 通过IO写入到目标路径(uploadPath)
		using (var fileStream = new FileStream(uploadPath, FileMode.Create, FileAccess.Write))
            {
                formFile.CopyTo(fileStream);
            }
		return visitUri;
	}
}

最后文件会保存控制层项目下的StaticFiles目录下
【ASP.NET CORE】实现图片的上传与通过路径访问预览_第1张图片
所有上传的文件最后都会在StaticFiles目录下,因为在Service中的uploadPath就是上传的存储路径

var uploadPath = Path.Combine(_env.ContentRootPath + "/StaticFiles",fileName);

注意

如果要将代码运行,需要先在指定的位置先创建好StaticFiles目录。要是上传到IIS中则需要在publish中创建StaticFiles文件目录

上传完毕的图片需要通过设置的访问路径进行访问预览

如果直接输入设置的访问路径可能并不会成功访问,需要在Startup类中的Configure方法设置静态文件的访问。

app.UseStaticFiles(new StaticFileOptions{
	FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "StaticFiles"))
});

你可能感兴趣的:(工作问题处理,asp.net,服务器,后端)