以下是一个使用ASP.NET Core从外部网站获取图像并保存在服务器上的示例代码:
using System;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
namespace ImageDownloader.Controllers
{
[ApiController]
[Route("[controller]")]
public class ImageController : ControllerBase
{
private readonly HttpClient _httpClient;
public ImageController(IHttpClientFactory httpClientFactory)
{
_httpClient = httpClientFactory.CreateClient();
}
[HttpPost]
public async Task DownloadImage(string imageUrl)
{
try
{
// 从外部网站下载图像
var response = await _httpClient.GetAsync(imageUrl);
response.EnsureSuccessStatusCode();
// 保存图像到服务器
var fileName = Path.GetRandomFileName();
var filePath = Path.Combine("Images", fileName);
using (var fileStream = new FileStream(filePath, FileMode.Create))
{
await response.Content.CopyToAsync(fileStream);
}
return Ok("图像下载成功并保存在服务器上");
}
catch (Exception ex)
{
return BadRequest($"图像下载失败:{ex.Message}");
}
}
}
}
在上述代码中,我们创建了一个名为ImageController
的控制器,并在构造函数中注入了IHttpClientFactory
来获取HttpClient
实例。在DownloadImage
方法中,我们首先使用HttpClient
发送GET请求获取外部网站的图像。然后,我们生成一个随机的文件名,并将图像保存到服务器上的Images
文件夹中。
为了使用这个控制器,你需要在Startup.cs
文件中进行一些配置。首先,确保在ConfigureServices
方法中添加以下代码来注册HttpClient
:
services.AddHttpClient();
接下来,在Configure
方法中添加以下代码来启用路由:
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
这样,你就可以使用ImageController
中的DownloadImage
方法来下载并保存图像了。可以通过向/image
端点发送POST请求,并在请求体中传递imageUrl
参数来使用该方法。
请注意,上述代码只是一个示例,你可能需要根据自己的需求进行适当的修改和错误处理。