我正在尝试从SQL Server数据库中获取存储为Image数据类型的附件(图像,word文档等)。附件可以是任何文件类型,但我只是想成功下载.jpg。
我可以将文件保存到本地驱动器,但在此过程中似乎正在破坏文件。
我正在尝试做什么:
我的代码:
public void ProcessRequest()
{
//Get the ticket number from query string
_ticketNumber = context.Request.QueryString["ID"];
SqlConnection conn = new SqlConnection(_DBConn);
SqlCommand cmd = new SqlCommand();
string fileName = ""; //Holds the file name retrieved from DB
byte[] data; // Holds the IMAGE data from DB
using (conn)
{
using (cmd)
{
cmd.CommandType = CommandType.Text;
cmd.CommandText = @"SELECT File_Name, Data FROM Tickets_All INNER JOIN Attachments ON Tickets_All.ID = Attachments.[Object_ID] WHERE Ticket = @Ticket";
cmd.Parameters.AddWithValue("@Ticket", _ticketNumber);
cmd.Connection = conn;
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
fileName = reader.GetString(0);
data = (byte[])reader["Data"];
if (data != null)
{
SaveData(fileName, data);
}
}
}
reader.Close();
}
}
protected bool SaveData(string FileName, byte[] Data)
{
string path = @"C:\Windows\temp\test.jpg";
try
{
BinaryWriter writer = new BinaryWriter(File.OpenWrite(path));
writer.Write(Data);
writer.Flush();
writer.Close();
}
catch (Exception ex)
{
return false;
}
return true;
}
请原谅我,如果代码不符合最佳实践,我更多的是VB程序员,我以前从来没有这样做过。我只想尝试一个有效的例子。
提前致谢。
答案 0 :(得分:2)
我会使用Image.FromStream方法执行此操作: http://msdn.microsoft.com/en-us/library/system.drawing.image.fromstream(v=vs.110).aspx
protected bool SaveData(string FileName, byte[] Data)
{
using (Image image = Image.FromStream(new MemoryStream(Data)))
{
image.Save("MyImage.jpg", ImageFormat.Jpeg);
}
return true;
}
答案 1 :(得分:0)
感谢大家的投入。在做了一些额外的测试之后,我认为从数据库中检索的数据已经以某种方式被压缩了。我能够以编程方式插入和拔出文件,当应用程序将数据放入数据库(第三方软件)时,问题就出现了。我将调查一下我可以提出的压缩。