2013-04-08 2 views
2

이미지 테이블이있는 SQL Server (2008 R2)를 가지고 있는데이 테이블에는 이미지 형식의 열이 있습니다. 내 이미지를이 열에 삽입하십시오.ASP.NET 웹 서비스를 사용하여 SQL Server에서 이미지 검색

Stream fs = FileUpload1.PostedFile.InputStream; 
BinaryReader br = new BinaryReader(fs); 
Byte[] bytes = br.ReadBytes((Int32)fs.Length); 

//insert the file into database 
string strQuery = "insert into pm005.images(imageName, type, alt, img)" + " values (@Name, @ContentType, @Alt, @Data)"; 
SqlCommand cmd = new SqlCommand(strQuery); 

cmd.Parameters.Add("@Name", SqlDbType.VarChar).Value = filename; 
cmd.Parameters.Add("@ContentType", SqlDbType.VarChar).Value = contenttype; 
cmd.Parameters.Add("@Alt", SqlDbType.VarChar).Value = TextBox1.Text; 
cmd.Parameters.Add("@Data", SqlDbType.Binary).Value = bytes; 
InsertUpdateData(cmd); 
lblMessage.ForeColor = System.Drawing.Color.Green; 
lblMessage.Text = "File Uploaded Successfully"; 

private Boolean InsertUpdateData(SqlCommand cmd) 
{ 
    // Open a connection the the SQL Server 
    SqlConnection con = new SqlConnection(); 
    con.ConnectionString = "server=sql-server;integrated security=SSPI;database=pm005"; 

    cmd.CommandType = CommandType.Text; 
    cmd.Connection = con; 
    try 
    { 
     con.Open(); 
     cmd.ExecuteNonQuery(); 
     return true; 
    } 
    catch (Exception ex) 
    { 
     Response.Write(ex.Message); 
     return false; 
    } 
    finally 
    { 
     con.Close(); 
     con.Dispose(); 
    } 
} 

삽입이 true를 반환하고 데이터베이스의 데이터를 볼 수 있기 때문에 정상적으로 작동한다고 생각됩니다.

그러나 나는 내 인생을 위축 할 수 없다. 나는이 이미지를 어떻게 되찾았는지 보았다. 특히 내가 원하는 것은 내 웹 서비스를 호출하고 imageID를 전달하고 이미지 (및 이미지 만)를 반환 할 수있게하는 것입니다. PHP로 완성 된 것과 매우 흡사하다. 이것은 지금 사용하는 코드입니다. 내가 너무 많은 튜토리얼을 검토 한

System.ArgumentException: The path is not of a legal form. 
    at System.IO.Path.NormalizePath(String path, Boolean fullCheck, Int32 maxPathLength) 
    at System.IO.Path.GetFullPathInternal(String path) 
    at System.IO.Path.GetFullPath(String path) 
    at System.Drawing.IntSecurity.UnsafeGetFullPath(String fileName) 
    at System.Drawing.IntSecurity.DemandReadFileIO(String fileName) 
    at System.Drawing.Image.FromFile(String filename, Boolean useEmbeddedColorManagement) 
    at WebService2.Service1.getImage(Int32 imageID, String uName, String pword) 

, 그리고 "PHP를 사용"을 제외한 모든 고체 답변을 찾을 : 오류를 제공

[WebMethod] 
[ScriptMethod(UseHttpGet = true)] 
public System.Drawing.Image getImage(int imageID, string uName, string pword) 
{ 
    string str=""; 
try 
{ 
    SqlCommand cmd = getSQLCommand("SELECT img FROM pm005.images WHERE id="+imageID); 

byte[] Img = (byte[])cmd.ExecuteScalar(); 

    // Convert the image record to file stream and display it to picture control 
    str = Convert.ToString(DateTime.Now.ToFileTime()); 
    FileStream fs = new FileStream(str, FileMode.CreateNew, FileAccess.Write); 
    fs.Write(Img, 0, Img.Length); 
    fs.Flush(); 
    fs.Close(); 

} 
catch 
{ 

} 
finally 
{ 

} 

System.Drawing.Image theImage = System.Drawing.Image.FromFile(str); 
return theImage; 

} 

. 내가해야한다면, 분명히 ASP.NET에서 그것을 할 수있는 방법이 있어야만합니까? 전체 파일 경로를 지정

답변

0

시도 :

FileStream fs = new FileStream(@"C:\Temp\YourFile.jpg", FileMode.CreateNew, FileAccess.Write); 

편집 :

오히려 당신이 메모리에하고 싶은처럼 소리 파일 시스템을 사용하는 것보다 :

public byte[] imageToByteArray(System.Drawing.Image imageIn) 
{ 
    MemoryStream ms = new MemoryStream(); 
    imageIn.Save(ms,System.Drawing.Imaging.ImageFormat.Gif); 
    return ms.ToArray(); 
} 

public Image byteArrayToImage(byte[] byteArrayIn) 
{ 
    MemoryStream ms = new MemoryStream(byteArrayIn); 
    Image returnImage = Image.FromStream(ms); 
    return returnImage; 
} 

합니다. ..

System.Drawing.Image theImage = null; 
try 
{ 
    SqlCommand cmd = getSQLCommand("SELECT img FROM pm005.images WHERE id="+imageID); 
    byte[] Img = (byte[])cmd.ExecuteScalar(); 
    theImage = byteArrayToImage(Img); 
} 
catch 
{ 

} 
finally 
{ 

}  
return theImage;  
} 
+0

전체 경로가 없으며 이미지가 DB에 저장됩니다. –

+0

DB에서 이미지를 검색 할 때 디스크에 쓰려고합니다. 호출 스택에서 'System.Drawing.Image.FromFile'이 실패하는 것을 볼 수 있습니다. 매개 변수의 첫 번째 인수에 대해 filePath가 필요한 'FileStream' 메서드의 6 번째 오버로드를 사용하고 있는지 다시 한 번 확인할 수 있습니까? –

+0

예, 그렇습니다. 자습서에서 말한 것입니다. 나는 내가 왜 그 길을 그냥 지나가는 지 모르겠다. –