Показывать изображение из байта [], оно показывает «неверный параметр» каждый раз при преобразовании в Image - PullRequest
0 голосов
/ 22 марта 2019

Я пытался показать изображение из базы данных, и когда я пытаюсь преобразовать байт [] в изображение, я получаю «Неверный параметр» Я использую 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 (в конце я получаю данные с информацией).Заранее спасибо.

...