Итак, я искал в Интернете решение и пробовал разные реализации, но все еще не могу сохранить изображение в своей базе данных sql.
Заранее спасибо... Я знаю, что есть много ресурсов, но я так и не нашел, как это сделать.
В настоящее время наш тип sql для изображения: varbinary(max), но я также безуспешно пробовал тип изображения.
Интерфейс в React у меня есть (обернут в функцию отправки):
// Upload user's signature
url = `api/users/uploadsignature?id=${id}`
let formData = new FormData();
formData.append('signature', this.state.signature, this.state.signature.name);
response = await fetch(url, {
method: 'POST',
body: formData,
});
Это в разделе формы:
<div className = "form-group">
<label htmlFor = "roleSelect">Upload Signature:</label>
<input
style = {{ display: 'none'}}
id = "signature"
name = "signature"
type = "file"
className = "form-control"
onChange = {this.signatureOnChange}
ref = {fileInput => this.fileInput = fileInput}
/>
<button type = "button" className = "btn btn-secondary" onClick = {() => this.fileInput.click()}>Pick Image</button>
</div>
Серверное ядро Asp.Net:
[HttpPost("[action]")]
public IActionResult UploadSignature(int id)
{
var files = HttpContext.Request.Form.Files;
try {
String query = $"UPDATE userAcct set signature='{files[0]}' WHERE userAcct.id = {id}";
String sql = @query;
dt = sqlConnection.Connection(sql);
return Ok();
}
catch (Exception e)
{
return BadRequest(new { Error = e });
}
}
Функция sqlConnection:
public DataTable Connection(String sql)
{
SqlConnection con = new SqlConnection(connectionString);
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = new SqlCommand(sql, con);
da.Fill(dt);
return dt;
}
Вы правы, я получаю сообщение об ошибке в моей функции подключения к таблице данных в da.SelectCommand. Я получаю сообщение об ошибке «System.Data.SqlClient.SqlException (0x80131904): неявное преобразование типа данных varchar в varbinary(max) не разрешено. Используйте функцию CONVERT для выполнения этого запроса».





Можете ли вы определить, какой слой выходит из строя? Похоже, что он определенно выйдет из строя на серверной части, поскольку экземпляр
HttpPostedFile— это не то, что вы можете напрямую объединить в SQL-запрос. Преобразуйте файл в байты и используйтеSqlParameter, чтобы поместить его вSqlCommand.