asp.net-core - 如何在 Blazor WebAssembly 中直接从服务器加载图像/视频?
问题描述
我在 Blazor webassembly 中实现了一个解决方案,该解决方案允许用户上传图像并将文件存储在服务器上,并将文件路径存储在数据库中。当我在客户端加载图像时,我将图像从服务器作为字节发送到客户端,并将图像字节转换为 base64 字符串并显示图像。这很好用,但根据我的阅读,这不是一个好习惯,因为 base64 转换将文件大小增加了 30%,并且图像无法缓存在客户端上。我想让浏览器从服务器路径下载文件并显示图像。我的问题如下:
- 如何设置服务器“根”位置以便浏览器知道从哪里获取文件?我在服务器上使用 IWebHostEnvironment 来获取本地路径。
- 有没有办法保护文件,只允许授权用户从服务器下载文件?
- 我应该将图像添加到与解决方案相同的文件夹中,还是应该在解决方案之外创建一个不同的文件夹?
我目前在 Blazor WebAssembly 解决方案中使用带有 ASP.NET CORE 5 的 IIS 服务器。
编辑1:
控制器方法:
[HttpGet(API.GetFile)]
public async Task<FileContentResult> GetFile([FromQuery] string fileType,string encoding,string name)
{
var path = Path.Combine(_webHost.ContentRootPath, "Media", "Images", name);
byte[] file = await System.IO.File.ReadAllBytesAsync(path);
return File(file, encoding);
}
用于访问文件的链接:
https://localhost:44339/GetFile?encoding=image/jpeg&name=3020_1_21.JPEG
在浏览器中生成的标签:
<img style="width:300px;height:300px" src="https://localhost:44339/GetFile?encoding=image/jpeg&name=3020_1_21.JPEG">
正如我在评论中提到的,该链接在 Postman 中有效,它检索图像,但在浏览器中不起作用,没有检索到文件。
解决方案
推荐阅读
- amazon-web-services - SAM Lambda python函数未连接到docker中的本地dynamoDb
- php - 如何通过 Mailgun 通过电子邮件发送 Twilio SMS 附件?
- postgresql - Docker dpage/pgadmin4 错误:指定的用户不存在
- json - 在 ColdFusion 中 JSON 返回 null
- c - fscanf 未在 C 中读取文件内容(使用 pthreads)
- kotlin - kotlinx.serialization:注入本地参数
- python - Python Regex:匹配前面或后面没有数字的字符串
- python - (sendex face_recognition) cv2 中的照片整形问题。将用作人脸识别的输入
- php - 为什么 PHP 认为它正在写入文件,但事实并非如此?
- java - LWJGL 的安装说明冲突?