我有一个类似的问题,我不能简单地给出图像资源的 URL,因为这些图像资源是特定于某些用户的。
我让我的 API 返回图像的字节流,然后在我的反应应用程序中按如下方式使用它
images(id: string, cancelToken?: CancelToken): Promise<FileResponse> {
let url_ = "pathtoendpoint/{id}";
let options_ = <AxiosRequestConfig>{
cancelToken,
responseType: "blob",
method: "GET",
url: url_,
headers: {
Accept: "application/octet-stream",
Authorization: "Bearer ezfsdfksf...."
},
};
return Axios.create().request(options_).then((_response: AxiosResponse) =>
{
return new Promise<FileResponse>(_response.data);
});
}
export interface FileResponse {
data: Blob;
status: number;
fileName?: string;
headers?: { [name: string]: any };
}
然后我创建一个包含 uri 的临时 DOM 字符串
let uri = URL.createObjectURL(data)
一旦我有了 uri,我就可以这样显示它
<img src={uri} id="someId" alt="" />
通过采用这种方法,我将图像字节视为任何其他类型的数据,无论是字符串、数字还是布尔值。并且,可以保护该资源。
这是我的服务器端控制器方法的样子,我使用的是 .NET 核心,但您将在任何其他平台上遵循类似的方法
[Produces("application/octet-stream")]
public async Task<ActionResult> GetImageById([FromRoute] Guid id)
{
var resource = await DatalayerService.GetImageAsync(id);
return File(resource.Filebytes, resource.ContentType);
}