如何在 ASP.Net Core 中保存上传的图片 URL?

加兹达拉·阿米尔

我正在上传图像作为用户模型的一部分,我应该保存图像 url 以在 REST 客户端中显示图像(链接如“localhost/Images/ImageName.png”),所以我将图像保存在wwwroot 这个在 Post Api 中:

 [HttpPost]
        public async Task<String> Post([FromForm]Machine mach)
        {
            try
            {
                if (mach.Files.Length > 0)
                {
                    {
                        FileInfo fi = new FileInfo(mach.Files.FileName);
                        var newfilename = "Image_" + DateTime.Now.TimeOfDay.Hours + fi.Extension;
                        var path = Path.Combine(hostingEnvironment.WebRootPath+ "\\Images\\" + newfilename);
                       /* var path = Path.Combine(Directory.GetCurrentDirectory(), @"wwwroot\Images");*/
                     
                        using (var stream = new FileStream(path, FileMode.Create))
                        {
                            mach.Files.CopyTo(stream);
                        }

                        Machine machine = new Machine();

                        mach.ImagePath = path;
                        
                        _context.machines.Add(mach);
                        _context.SaveChangesAsync();

                    }
                    return ("saved");

                }

我正确保存了模型,但我得到了这样的网址:

"imagePath": "C:\Users\amyra\source\repos\MyApi\wwwroot\Images\Image_18.png"

我试图通过“localhost:port/Images/..”显示图像,但找不到页面。

谢里夫·埃尔梅泰尼

检查您的应用程序的启动并确保该app.UseStaticFiles();行在那里。通常它应该在之后app.UseHttpsRedirection();和之前app.UseAuthorization

默认 API 模板没有此行。

编辑:保存图像的 URL 而不是物理文件路径

mach.ImagePath  = new UriBuilder
{
    Scheme = Request.Scheme,
    Host = Request.Host.Host,
    Port = Request.Host.Port ?? -1,
    Path = "/Images/" + newfilename
}.ToString();

虽然我不建议将 URL 的主机/端口/方案部分保存在数据库中,因为这些可能会发生变化。

相反,我建议只保存路径部分

mach.ImagePath = "/Images/" + newfilename;

您可以在向客户端提供数据时添加主机/端口/方案部分。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章