Ответ будет во многом зависеть от того, какую технологию вы используете для доступа к этому SQL Server, используете ли вы ORM и т. Д. Поскольку вы не предоставили такую информацию в своем вопросе, позвольте мне проиллюстрировать примеркак это сделать, используя обычный ADO.NET.
Вы можете начать с формы:
<% using (Html.BeginForm("Index", "Home", FormMethod.Post, new { enctype = "multipart/form-data" })) { %>
<label for="file">Select a pdf file:</label>
<input type="file" name="file" id="file" />
<input type="submit" value="Upload" />
<% } %>
и действия контроллера для обработки отправки этой формы:
[HttpPost]
public ActionResult Index(HttpPostedFileBase file)
{
if (file != null && file.ContentLength > 0)
{
var fileName = Path.GetFileName(file.FileName);
var extension = Path.GetExtension(fileName);
var document = new byte[file.InputStream.Length];
file.InputStream.Read(document, 0, document.Length);
if (string.Equals(".pdf", extension, StringComparison.OrdinalIgnoreCase))
{
using (var conn = new SqlConnection(SomeConnectionString))
using (var cmd = conn.CreateCommand())
{
conn.Open();
cmd.CommandText = "INSERT INTO Documents (document) VALUES (@document);";
cmd.Parameters.Add("@document", SqlDbType.Binary, 20).Value = document;
cmd.ExecuteNonQuery();
}
}
}
return View();
}
Конечно, часть SQL должна быть выведена в отдельный репозиторий, чтобы избежать загромождения действия контроллера таким кодом.Кроме того, если вы используете SQL Server 2008, вы можете взглянуть на новый тип FILESTREAM , который более приспособлен к такого рода вещам.