我做了一个网站与用户的个人资料,在那里他们可以上传自己的头像。我需要从用户的照片,并存储在用户数据库中。首先从用户的图像和发送信息到服务器:
saveButton.onclick = (() => {
const file = photoInput.files[0];
const reader = new FileReader();
reader.readAsArrayBuffer(file);
reader.onload = (async () => {
const bytes = reader.result;
const description = descriptionInput.value;
const data = JSON.stringify({
photo: bytes,
description
});
await fetch("[username]/changedata", {
method: "PUT",
headers: {
"Content-Type": "application/json"
},
body: data
});
window.location.reload();
});
});
然后尝试将此图像存储在用户数据库中:
app.MapPut("{username}/changedata", async (string username, HttpContext context) =>
{
var data = await context.Request.ReadFromJsonAsync<UserDataChange>();
using var con = new SqlConnection(connection);
await con.OpenAsync();
var command = new SqlCommand();
command.Connection = con;
command.CommandText = "UPDATE [users] " +
"SET description=@description, picture=@picture " +
"WHERE username=@username";
command.Parameters.AddWithValue("username", username);
command.Parameters.AddWithValue("description", data.Description);
command.Parameters.AddWithValue("picture", data.Photo);
await command.ExecuteNonQueryAsync();
await con.CloseAsync();
});
UserDataChange类:
public class UserDataChange
{
public byte[] Photo { get; set; }
public string Description { get; set; }
}
但是byte[]在这种情况下是无效类型。
1条答案
按热度按时间643ylb081#
通常对于头像的处理,因为文件大小很小,我会选择转换成base64格式。
How to change upload file to base64 format
将数据库中的图片字段设置为nvarchar(4000),如果不够可以继续增加,通常我们会限制头像图片的大小,比如不能大于200k或者1M。
然后从数据库中取出后,使用
img
标记来显示它。