我已经在这里尝试了所有其他stackoverflow帮助主题,但没有一个对我有效。
我正在遵循Steven Sanderson的“Pro ASP.NET MVC框架”中的指示(第195-198页),它只是不起作用。它适用于本书附带的示例应用程序。
我创建了一个测试MVC应用程序,它具有索引和创建视图。它正在为数据库保存一些内容,因为我可以看到填充了这两个单词的“二进制数据”字段。但它不会显示。我不知道它是否会显示,因为我将图像保存到数据库中是错误的,或其他。
这里发布的代码太多了,但是我将一个简单的应用程序编译成了一个.zip文件,它正好显示了我想要完成的任务。我希望是允许的。你们中的一位MVC专家可以下载并告诉我我做错了什么以及为什么它不起作用?我对此非常敏感,我很困惑。
如果您需要更多信息,请与我们联系。
非常感谢, 肖恩
我的档案位于:http://www.fraxis.com/test.zip
它是使用Visual Studio 2008与.NET 3.5(SP1)和ASP.NET MVC 1.0构建的。
一切都在HomeController和Home视图中。索引和创建。数据库位于app_data。
答案 0 :(得分:2)
在HomeController类中替换第52行:
image.InputStream.Read(TableToCreate.Image, 0, image.ContentLength);
这两行:
BinaryReader reader = new BinaryReader(image.InputStream);
TableToCreate.Image = reader.ReadBytes(image.ContentLength);
答案 1 :(得分:1)
查看此帖子。
Having troubles calling a Controller Post Method…
修改强>
然后我有以下内容来恢复图像;
控制器;
public FileResult GetImage(int id)
{
return File(PhotoHelper.GetImageBytes(id), "image/jpeg");
}
在我看来;
<%= Html.Image("img", "/Photos/GetImage?id=" + Model.Photo.Id.ToString(), "BioPic", new { Width = "350px" })%>
基本上我已经将一个字节流保存到数据库然后检索它们,然后图像从我控制器中名为GetImage的动作中抓取该图像。
这会回答你的问题吗?
答案 2 :(得分:0)
Public int InsertUpdateImage(
ref System.Data.SqlClient.SqlConnection _SqlConnection,
string _SQL,
System.Drawing.Image _Image,
string _ImageFieldName,
System.Drawing.Imaging.ImageFormat _ImageFormat)
{
int _SqlRetVal = 0;
try
{
// lets add this record to database
System.Data.SqlClient.SqlCommand _SqlCommand
= new System.Data.SqlClient.SqlCommand(_SQL, _SqlConnection);
// Convert image to memory stream
System.IO.MemoryStream _MemoryStream = new System.IO.MemoryStream();
_Image.Save(_MemoryStream, _ImageFormat);
// Add image as SQL parameter
System.Data.SqlClient.SqlParameter _SqlParameter
= new System.Data.SqlClient.SqlParameter("@" + _ImageFieldName, SqlDbType.Image);
_SqlParameter.Value = _MemoryStream.ToArray();
_SqlCommand.Parameters.Add(_SqlParameter);
// Executes a Transact-SQL statement against the connection
// and returns the number of rows affected.
_SqlRetVal = _SqlCommand.ExecuteNonQuery();
// Dispose command
_SqlCommand.Dispose();
_SqlCommand = null;
}
catch (Exception _Exception)
{
// Error occurred while trying to execute reader
// send error message to console (change below line to customize error handling)
Console.WriteLine(_Exception.Message);
return 0;
}
return _SqlRetVal;
}