Я пытался показать изображение из базы данных, и когда я пытаюсь преобразовать байт [] в изображение, я получаю «Неверный параметр» Я использую DLL для подключения к моей базе данных, здесь практически для скоростисоединение, в конце я получаю таблицу данных с информацией о запросе
Я пытаюсь использовать MemoryStream, используя IFormatter и Seralizing datatable, чтобы я мог получить байт [], и я недавно попытался преобразоватьбайт [] в base64string, и у меня возникают некоторые другие проблемы, когда я пытаюсь вернуть «изображение» (но это потому, что я использую общедоступное изображение loadPhoto ())
Вот код, который у меня есть для загрузки
public Image uploadPhoto()
{
string strServidor = "srv1";
speedDLL _conex = new speedDLL(strServidor, "SCHOOL");
var file = Request.Files["file"];//This is from a Devextreme component
int maxFileSize = 1024 * 1536;
string fileExtension = Path.GetExtension(file.FileName);
if (fileExtension.ToLower() == ".jpg" || fileExtension.ToLower() == ".png")
{
if (file.ContentLength < maxFileSize)
{
MemoryStream target = new MemoryStream();
file.InputStream.CopyTo(target);
Image imageIn = Image.FromStream(target);
byte[] imagen; //= target.ToArray();
using (MemoryStream ms = new MemoryStream())
{
imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
imagen = ms.ToArray();
}
try
{
_conex.BeginTran();
_conex.AgregarParametro("@Imagen", imagen);//This is a method from the dll to put a parameter into the storedprocedure
_conex.AgregarParametro("@IdFlete", "PRUEBAjpg1");//This is the same
_conex.EjecutaComando("EXEC PA_ActSubirImag @IdFlete, @Imagen");
_conex.CommitTran();
}
catch (Exception Ex)
{
_conex.RollBackTran();
}
В SQL я получаю что-то вроде 0xFFD8FFE000 .. И вот как я пытался получить это изображение:
public Image loadPhoto()
{
try
{
string strServidor = "srv1";
speedDLL _conex = new speedDLL(strServidor, "SCHOOL");
object imagenSQL = _conex.EjecutaConsulta("EXEC PA_ConTraerImag @IdFlete = PRUEBAjpg1");
MemoryStream stream = new MemoryStream();
System.Runtime.Serialization.IFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
formatter.Serialize(stream, imagenSQL);
byte[] imagen = stream.GetBuffer();
//MemoryStream imagenStream = new MemoryStream(stream.GetBuffer());
//base64StringIm = base64StringIm.Replace("data:image/jpeg;base64,", "");
//Image convertToImage = Image.FromStream(new MemoryStream(imagen));
Image imagenReturn = null;//Parametro no valido
using (MemoryStream ms = new MemoryStream(imagen))
{
imagenReturn.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
//imagenReturn.ImageUrl = "";
//var base64Im = Convert.ToBase64String(imagen);
//var imgSrc = String.Format("data:image/jpeg;base64",base64Im);
return imagenReturn;
}
// using (MemoryStream ms = new MemoryStream(imagen))
using (Image image = Image.FromStream(ms, true, true))
{
return (Image)image.Clone();
}
}
Я добавил в комментарии некоторые вещи, которые я пробовал,Я использую Image image = new Image.FromStream (), и я получаю тот же результат «неверного параметра», я не знаю, может ли кто-то помочь мне в этом, возможно, что-то не так при создании потока, или, может быть, яs dll (в конце я получаю данные с информацией).Заранее спасибо.