无法访问后端项目中上传的图像

我正在尝试访问存储在前端应用程序的 /uploads/ 文件夹中的图像。

我得到http://localhost:4200/uploads/a.jpghttp://localhost:4200/StaticFiles/a.jpg的 404 。我需要图像的路径才能将其显示在图库中。

我尝试使用图像的完整路径(“D:/blabla/uploads/a.jpg”),但似乎受到限制。然后我使用下面的代码从后端提供到我的上传文件夹的路径,但我仍然得到 404。

我的后端和前端项目位于不同的文件夹中,我的前端将请求发送到后端的端口。

后端运行最新的.net core,前端是Angular 8。

这就是我提供静态文件的方式:

var aux = Path.Combine(Directory.GetCurrentDirectory(), "uploads");


app.UseStaticFiles(new StaticFileOptions

    {

        FileProvider = new PhysicalFileProvider(aux),

        RequestPath = "/StaticFiles"

    }

);

这就是我上传图像的方式。该代码可以工作并上传项目内 /uploads 文件夹中的图像。


var uploadFilesPath = Path.Combine(_host.ContentRootPath, "uploads");


if (!Directory.Exists(uploadFilesPath))

    Directory.CreateDirectory(uploadFilesPath);


    foreach (var file in fileData)

        {

            var fileName = Guid.NewGuid() + Path.GetExtension(file.FileName);

            var filePath = Path.Combine(uploadFilesPath, fileName);


            using (var stream = new FileStream(filePath, FileMode.Create))

                {

                    file.CopyTo(stream);

                }


            var propToAddImageTo = _propManager.GetById(id);


            _propManager.AddImage(propToAddImageTo, filePath);

        }

当我尝试设置一个简单的<img src="localhost:4200/uploads/a.jpg">或时<img src="localhost:4200/StaticFiles/a.jpg">,Mozilla 开发人员工具的网络选项卡上的请求显示 404。


大话西游666
浏览 106回答 2
2回答

12345678_0001

的默认值_host.ContentRootPath等于Directory.GetCurrentDirectory(),但前提是您使用WebHost.CreateDefaultBuilder。从文档中:CreateDefaultBuilder执行以下任务:...将内容根设置为 . 返回的路径Directory.GetCurrentDirectory。您的代码假设始终ContentRootPath与相同,但这并不总是正确的。如果您不使用,或者您的代码分为多个项目(正如您在评论中提到的),它们将不会指向同一个地方。Directory.GetCurrentDirectoryCreateDefaultBuilder

胡说叔叔

下面的代码对我有用:app.UseCors("CorsPolicy");app.UseStaticFiles();app.UseStaticFiles(new StaticFileOptions(){&nbsp; &nbsp; FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), @"uploads")),&nbsp; &nbsp; RequestPath = new PathString("/StaticFiles")});app.UseMvc();它需要该uploads文件夹应该存在于根目录中,否则会抛出错误。假设结构是 ApplicationName/uploads/a.jpg ,您可以使用如下:<img src="http://localhost:xxxx/StaticFiles/a.jpg">要在服务器端保存图像,您可以通过以下方式找到路径:var pathToSave = Path.Combine(Directory.GetCurrentDirectory(), "uploads");
打开App,查看更多内容
随时随地看视频慕课网APP