c# - Xamarin 表单 - 如何使用 sql server web api 上传和检索图像
问题描述
我需要将图像作为二进制数据上传并在此处检索是我的代码 Web Api
[ResponseType(typeof(tblEmpPicture))]
public IHttpActionResult PosttblEmpPicture(tblEmpPicture tblEmpPicture)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
db.tblEmpPictures.Add(tblEmpPicture);
try
{
db.SaveChanges();
}
catch (DbUpdateException)
{
if (tblEmpPictureExists(tblEmpPicture.intEmpCode))
{
return Conflict();
}
else
{
throw;
}
}
return CreatedAtRoute("DefaultApi", new { id = tblEmpPicture.intEmpCode }, tblEmpPicture);
}
主页.xaml
<Image x:Name="userImage" Source="{Binding Pic.vbrPicture, Mode=TwoWay}" Aspect="AspectFill" WidthRequest="85" HeightRequest="85" >
主页.cs
await CrossMedia.Current.Initialize();
if (!CrossMedia.Current.IsCameraAvailable || !CrossMedia.Current.IsTakePhotoSupported)
{
await DisplayAlert("No Camera", ":( No camera available.", "OK");
return;
}
var file = await CrossMedia.Current.TakePhotoAsync(new Plugin.Media.Abstractions.StoreCameraMediaOptions
{
Directory = "Sample",
Name = "test.jpg"
});
if (file == null)
return;
await DisplayAlert("File Location", file.Path, "OK");
userImage.Source = ImageSource.FromStream(() =>file.GetStream());
await ((MainViewModel)this.BindingContext).PutUserPicCommand();
主视图模型
private tblEmpPicture _Pic = new tblEmpPicture();
public tblEmpPicture Pic
{
get { return _Pic; }
set
{
_Pic = value;
OnPropertChanged();
}
}
public async Task PutUserPicCommand()
{
try
{
IsBusy = true;
// Call your web service here
var employeesTaskServices = new TaskServices();
await employeesTaskServices.PutUserPicAsync(_Pic);
}
catch (Exception ex)
{
// Handle exception
}
finally
{
IsBusy = false;
}
}
请我需要将图像转换为二进制数据并将其保存到 sql server。我能够将其他数据保存到 sql server,但不知道如何将图像转换为二进制并保存到数据库以及如何检索和显示图像。
解决方案
作为最佳实践,除非确实有必要,否则不应将图像直接保存到 SQL Server 中。在此链接中阅读更多内容。
要回答您的问题,请按照以下步骤操作。
将图像转换为 Base64。
public static async Task<string> Convertbase64Async (Stream stream) { var bytes = new byte[stream.Length]; await stream.ReadAsync(bytes, 0, (int)stream.Length); string base64 = Convert.ToBase64String(bytes); return base64; }
现在图像将采用字符串格式。进行插入。
INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);
当您想要显示图像时,请使用 SELECT 查询从 SQL 中检索图像。
将 Base64 转换回图像格式。
public Image LoadImage(String base_64) { byte[] bytes = Convert.FromBase64String(base_64); Image image; using (MemoryStream ms = new MemoryStream(bytes)) { image = Image.FromStream(ms); } return image; }
推荐阅读
- javascript - 在没有 PHP 的网站之间传递 Javascript 变量的最佳/最安全的方法?
- php - 会话管理系统
- python - 从 numpy 中的 1d 向量映射 2d 延迟向量
- math - 如何在 spoj 上解决 ALICESIE。它的答案如何有共同的模式
- android - layout_constrainedWidth 无法正常工作
- python - 比较 DataFrames/csv 并仅返回有差异的列,包括 Key 值
- javascript - 如何根据选择隐藏和显示 HTML 中的字段
- google-sheets - GOOGLEFINANCE 函数 - 返回 #N/A 的特定工具
- kubernetes - 复制控制器文件中的图像标记
- python - 具有匹配/更新条件的 Python 嵌套 For 循环