GVKun编程网logo

来自数据库的PHP显示图像(中等Blob)(php如何显示数据库里图片)

14

对于来自数据库的PHP显示图像(中等Blob)感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍php如何显示数据库里图片,并为您提供关于Angular10将blob转换为显示图像、asp.net

对于来自数据库的PHP显示图像(中等Blob)感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍php如何显示数据库里图片,并为您提供关于Angular 10 将 blob 转换为显示图像、asp.net-mvc – 使用ASP.NET MVC在Details页面模板中显示来自数据库的byte []数组图像、c# – 从MySQL中检索中等blob只返回13个字节、c# – 来自数据库的asp.net web api中的视频流的有用信息。

本文目录一览:

来自数据库的PHP显示图像(中等Blob)(php如何显示数据库里图片)

来自数据库的PHP显示图像(中等Blob)(php如何显示数据库里图片)

我目前有一个数据库,可以在其中存储图像.
但是我创建以显示它们的PHP页面…不起作用.
但是当我将链接用作<的scr时; img>它显示一个空的图像框架.
如果我直接回显图像,则会出现很多奇怪的迹象

我要显示图像的方式是:
    < img src =“ image.PHP?image =”'.$imageID.'/>

我用于显示图像(image.PHP)的代码是:

 <?PHP session_start();
 if(!isset($_GET['image']))
 {
     header("HTTP/1.0 404 Not Found");
 }
 else{
     $link = MysqL_connect('localhost', '45345345435435345', 'wewfsersdfds');
            if (!$link) {
                echo "error";
                die;
            }

            $db_selected = MysqL_select_db(Tha base, $link);
            if (!$db_selected) {
                echo "error";
                die;
            }
 $nummer=(int)trim(stripslashes($_GET['image']));
 $mynr=$nummer;
 $sql="SELECT * FROM Foto WHERE fotonr=$mynr";
 $result=MysqL_query($sql);
 if(!$result)
 {
     echo "error".MysqL_error();
     header("HTTP/1.0 404 Not Found");
 }
 else
 {

     $foto = MysqL_fetch_assoc($result);

     header("Content-type: ".$foto['type']);
     echo $foto['image'];


 }
 }
 ?>

我已经尝试了很多,但是它不起作用:(
我将代码更新为最新版本.
sql出错(不选择任何内容/从不做int的MysqL_real_escape_string)

现在它显示的是字符而不是图像的直线,这至少是一种改进…

有人能帮我吗?

感谢您的时间!

解决方法:

老实说,我知道这可能很棘手.我认为这与您如何存储它有关,而不是与输出它有关.我有一个可以显示的最新项目的存储示例.

$fp = fopen($image_path, 'r');
$image = fread($fp, filesize($image_path));
$image = addslashes($image);
fclose($fp);

// save $image into DB.

不知道您是否对file_get_contents做类似的事情.我的输出方式与您的操作方式类似,只是我使用ORM和框架.

Angular 10 将 blob 转换为显示图像

Angular 10 将 blob 转换为显示图像

如何解决Angular 10 将 blob 转换为显示图像?

我的 Web 应用程序是在 MEAN 堆栈上制作的。绘画服务连接到我的 node.js 服务器并以 blob 形式获取图像文件(存储在服务器上)。我正在尝试使用此 blob 文件在 Angular 10 前端显示为图像。我确实成功获取了 blob 文件,但无法显示它。我怎样才能做到这一点?或者有更好的方法吗?

下面是我的 component.ts 文件

export class PaintingsComponent implements OnInit {

  thumbnail;

  constructor(private paintingService: PaintingsService,private sanitizer: DomSanitizer) { }

  ngOnInit() {
    this.paintingService.getAllPaintings().subscribe(
      (res) => { 
        var file = new File([res],"image",{ type: "image/png" })
        var output = document.getElementById(''test'')
        var url;
        var reader = new FileReader()
        reader.onload = () => {
          url = reader.result
          console.log(''URL '',url)
          this.thumbnail = this.sanitizer.bypassSecurityTrustUrl(url)
          console.log(''Thumbnail '',this.thumbnail)
        }
        reader.readAsDataURL(file)
      },(err) => console.log(''This is error'',err)
    )
  }

}

下面是我的 component.html 文件

<img id="myimage" [src]=''thumbnail'' height="200px"/>

url 具有类似的值

data:image/png;base64,77+9UE5HDQoaCgAAAA1JSERSAAACPw.......

缩略图具有类似的价值

SafeUrlImpl {changingThisBreaksApplicationSecurity:"data:image/png;base64,77+9UE5HDQoaCgAAAA1JSERSAAACoAu+/vQ9iJu+/vXgnNu+/ve+/vQAAAABJRU5E77+9QmDvv70="
.....

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

asp.net-mvc – 使用ASP.NET MVC在Details页面模板中显示来自数据库的byte []数组图像

asp.net-mvc – 使用ASP.NET MVC在Details页面模板中显示来自数据库的byte []数组图像

当我尝试使用以下内容在Details页面模板中显示byte []数组图像时:

public FileContentResult RenderPhoto(byte[] photo)
{
    // var array = (byte[])Session["photo"];
    // return File(array,"image/jpeg");

    return File(photo,"image/jpeg");
}

<img src="@Url.Action("RenderPhoto",Model.Photo)"/>

照片为空.

如果我在会话中存储student.Photo:

//
// GET: /Student/Details/5

public ViewResult Details(int id)
{
    Student student = db.Students.Find(id);

    Session["photo"] = student.Photo;

    return View(student);
}

并尝试显示从Session(上面的注释行)中检索值的图像.

为什么我在第一种情况下获得空值?

将学生传递给ViewResult详细信息(int id)中的View后,Model.Photo不再保留该值?

解决方法

Why I’m getting a null value in the first case?

您不能在< img>中将字节数组传递给服务器.标签. < img> tag只是向指定的资源发送GET请求.正确的方法是使用id:

<img src="@Url.Action("RenderPhoto",new { photoId = Model.PhotoId })" />

然后:

public ActionResult RenderPhoto(int photoId)
{
    byte[] photo = FetchPhotoFromDb(photoId);
    return File(photo,"image/jpeg");
}

c# – 从MySQL中检索中等blob只返回13个字节

c# – 从MySQL中检索中等blob只返回13个字节

我搜索了很多并尝试了各种方法,但无法解决这个问题.
我需要将图像保存到 mysql文件中.

我使用下面的代码将图像保存到数据库中.

try
{
    string location = @"C:\Users\test\Downloads\Photos\batman-greenscreen.jpg";

    FileStream fs = new FileStream(location,FileMode.Open,FileAccess.Read);
    UInt32 fileLength = (UInt32)fs.Length;
    byte[] buffer = new byte[fileLength];
    fs.Read(buffer,(int)fileLength);

    string sqlPhotoQuery = "INSERT INTO tab_photo VALUES('" + photo.PhotoId + "','" + photo.ProjectID + "','" + photo.Day + "','" + photo.Barcode + "','" + photo.Photoname + "','" + photo.PhotoXml + "','" + buffer + "','" + fileLength + "')";
    int result = MysqLHelper.ExecuteNonQuery(connectionString,sqlPhotoQuery);
    if (result > 0)
        return true;
    else
        return false;
}
catch (Exception e)
{
    return false;
}

在此文件中图像长度为12428,

我试图从数据库中检索数据:

Photo photo = new Photo();
try
{
    string sqlQuery = "SELECT * FROM tab_photo where PhotoId='"+photoId+"'";
    MysqLDataReader rdr = MysqLHelper.ExecuteReader(connectionString,sqlQuery);
    while (rdr.Read())
    {
        photo.PhotoId = rdr.GetString("PhotoId");
        photo.ProjectID = rdr.GetString("ProjectID");
        photo.Day = rdr.GetInt32("Day");
        photo.Barcode = rdr.GetString("Barcode");
        photo.Photoname = rdr.GetString("Photoname");
        photo.PhotoXml = rdr.GetString("PhotoXml");

        MemoryStream ms;
        UInt32 FileSize;
        Bitmap outimage;

        int fileSize = rdr.GetInt32(rdr.Getordinal("PhotoSize"));
        byte[] rawData = new byte[fileSize];
        rdr.GetBytes(rdr.Getordinal("Photo"),rawData,(Int32)fileSize);

        photo.imageByte = rawData;

    }
}
catch (Exception e)
{}

但是当我检索文件时,它只检索前13个字节.之后,它的值为零,并且检索值存在差异.

我遵循了Handling BLOB Data With Connector/Net中提到的说明.

根据我已经改变我的设置如下:

这是数据保存在数据库中的方式

我无法获得正确值的原因是什么?在数据保存或数据检索或数据库配置方面有任何问题吗?

解决方法

您无法在数据库中拥有正确的数据.通过将缓冲区连接到查询字符串中,“System.Byte []”将被插入到数据库中,因为insert语句基本上看起来像

INSERT INTO tab_photo VALUES(...,'System.Byte[]',...)";

像在示例中一样使用参数化查询,你应该很好.

不要只是将某些字符串连接到SQL查询中. (并且不要在这样的方法中捕获并吞没所有异常.这使得在发生故障时很难调试.)

c# – 来自数据库的asp.net web api中的视频流

c# – 来自数据库的asp.net web api中的视频流

我想通过asp.net web api控制器从数据库中流式传输视频.我已经从我的服务器中的静态文件(代码下面)完成了,但我无法完成数据库模式.
这是我的代码(我通过网络搜索获得)

public class VideosController : ApiController
{
    // GET api/values
    public HttpResponseMessage Get(string filename)
    {
        var filePath = HttpContext.Current.Server.MapPath("~") + filename;
        if (!File.Exists(filePath))
            return new HttpResponseMessage(HttpStatusCode.NotFound);

        var response = Request.CreateResponse();
        response.Headers.AcceptRanges.Add("bytes");

        var streamer = new FileStreamer();
        streamer.FileInfo = new FileInfo(filePath);
        response.Content = new PushStreamContent(streamer.WritetoStream,"video/mp4");

        RangeHeaderValue rangeHeader = Request.Headers.Range;
        if (rangeHeader != null)
        {
            long totalLength = streamer.FileInfo.Length;
            var range = rangeHeader.Ranges.First();
            streamer.Start = range.From ?? 0;
            streamer.End = range.To ?? totalLength - 1;

            response.Content.Headers.ContentLength = streamer.End - streamer.Start + 1;
            response.Content.Headers.ContentRange = new ContentRangeHeaderValue(streamer.Start,streamer.End,totalLength);
            response.StatusCode = HttpStatusCode.PartialContent;
        }
        else
        {
            response.StatusCode = HttpStatusCode.OK;
        }
        return response;
    }


    class FileStreamer
    {
        public FileInfo FileInfo { get; set; }
        public long Start { get; set; }
        public long End { get; set; }

        public async Task WritetoStream(Stream outputStream,HttpContent content,TransportContext context)
        {
            try
            {
                var buffer = new byte[65536];
                using (var video = FileInfo.OpenRead())
                {
                    if (End == -1)
                    {
                        End = video.Length;
                    }
                    var position = Start;
                    var bytesLeft = End - Start + 1;
                    video.Position = Start;
                    while (position <= End)
                    {
                        // what should i do here?
                        var bytesRead = video.Read(buffer,(int)Math.Min(bytesLeft,buffer.Length));
                        await outputStream.WriteAsync(buffer,bytesRead);
                        position += bytesRead;
                        bytesLeft = End - position + 1;
                    }
                }
            }
            catch (Exception ex)
            {
                // fail silently
            }
            finally
            {
                outputStream.Close();
            }
        }
    }
}

这是我的HTML代码:

<video width="640" height="480" controls="controls">
        <source src="/api/Videos/?filename=sample.mp4" type="video/mp4">
    </video>

有一种方法可供我(由其他人编写)从引擎(数据库)获取一系列文件,其代码如下:

public byte[] Engine.DownloadStreamFile(Guid fileId,long from,long length)

我试图从这个方法读取并写在响应输出流,但我不能.它似乎我无法处理从谷歌铬接收.有什么想法吗?

解决方法

根据您提供的信息,并假设您的Engine类中的方法执行人们认为它通过名称和签名执行的操作,您应该尝试使用Engine.DownloadStreamFile方法替换文件系统内容:

// what should i do here?
var bytesRead = video.Read(buffer,buffer.Length));
// becomes
var bytesRead = Engine.DownloadStreamFile(this.fileId,this.Start,this.End);

您显然需要向您的类添加fileId字段/属性,而不是今天的FileInfo.

关于来自数据库的PHP显示图像(中等Blob)php如何显示数据库里图片的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于Angular 10 将 blob 转换为显示图像、asp.net-mvc – 使用ASP.NET MVC在Details页面模板中显示来自数据库的byte []数组图像、c# – 从MySQL中检索中等blob只返回13个字节、c# – 来自数据库的asp.net web api中的视频流的相关信息,请在本站寻找。

本文标签: