mvc3 получить полный путь, используя HttpPostedFileBase
У меня есть кнопка просмотра, и я сохраняю ее в базе данных.
используя mvc3
Посмотреть
@using (Html.BeginForm("Upload", "Upload", FormMethod.Post, new { enctype = multipart/form-data" }))
{
<input type="file" name="file" />
}
контроль
public ActionResult Upload(FormCollection collection HttpPostedFileBase file)
string filefullpath = Path.GetFullPath(file.FileName);
Path.GetFullPath возвращает только имя файла, и мой код разрушается, потому что он ожидает полный путь к файлу.
Я попытался выполнить тестирование, пройдя полный путь теста C:\filename.jpg, и это сработало. так что мне не хватает полного пути, который нужно передать функции....
Как получить полный путь от кнопки обзора, которая была выбрана пользователем.
Спасибо,
1 ответ
Насколько я знаю, вы не можете получить полный путь. Это как-то связано с безопасностью.
В любом случае, вам это не нужно, так как вы будете сохранять поток так, как вам нравится.
Обновить:
Какой-то голый код:
var file = Request.Files[0];
if (file == null || file.ContentLength == 0)
{
throw new InvalidOperationException("No file has been selected for upload or the file is empty.");
}
file.SaveAs(path); // <-- path is somewhere on you *local* drive
или в базу данных:
Структура данных
CREATE TABLE [dbo].[SystemImage](
[Id] [uniqueidentifier] NOT NULL,
[ImageData] [image] NOT NULL,
CONSTRAINT [PK_SystemImage] PRIMARY KEY CLUSTERED
(
[Id] ASC
) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE [dbo].[SystemImage] ADD CONSTRAINT [DF_SystemImage_Id] DEFAULT (newid()) FOR [Id]
GO
Код
using (var connection = new SqlConnection(@"data source=.\SQLEXPRESS;initial catalog=ImageTest;Integrated Security=SSPI;"))
{
connection.Open();
using (var command = connection.CreateCommand())
{
command.CommandType = CommandType.Text;
command.CommandText = "insert into SystemImage (ImageData) values (@ImageData)";
command.Parameters.AddWithValue("ImageData", file.InputStream.ToBytes());
command.ExecuteNonQuery();
}
}
Для Stream.ToBytes()
метод расширений смотрите по этой ссылке:
http://shuttle.codeplex.com/SourceControl/changeset/view/3f7f1f2cf2c0