1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 【ASP.NET CORE】实现图片的上传与通过路径访问预览

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

时间:2024-05-02 05:13:01

相关推荐

【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 = bine(_env.ContentRootPath + "/StaticFiles",fileName);// 访问路径(动态获取IP和端口号)string address = string.Empty;// 获取ipforeach (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 = bine(url + "/staticfile",fileName);// 通过IO写入到目标路径(uploadPath)using (var fileStream = new FileStream(uploadPath, FileMode.Create, FileAccess.Write)){formFile.CopyTo(fileStream);}return visitUri;}}

最后文件会保存控制层项目下的StaticFiles目录下

所有上传的文件最后都会在StaticFiles目录下,因为在Service中的uploadPath就是上传的存储路径

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

注意

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

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

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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。