使用VB.net,PHP和Java从MySQL DB保存和检索图像

时间:2018-05-22 12:23:12

标签: php mysql .net

我有一个VB.net应用程序,可以存储和检索我的数据库中的图像。一切正常。

然后我制作了一个可以在手机上运行的Android应用程序(用Java),使用PHP脚本将图片发送到同一个数据库。这样,用户不必拍照,然后首先将它们下载到PC。 我试图打开用PHP存储的图片时出现问题...

这就是我在vb中的表现方式:

Public Function updateDropPics(iDrop As String, fImg As Image, sType As String, sDate As String)
    Dim arrImage() As Byte
    Dim cmd As New MySqlCommand
    Dim Sql As String = ""
    Try
        Dim mstreamF As New System.IO.MemoryStream()

        fImg.Save(mstreamF, System.Drawing.Imaging.ImageFormat.Jpeg)
        arrImage = mstreamF.GetBuffer()
        mstreamF.Close()


        Sql = "UPDATE  photos SET Picture_Data= @fImg, Date_Added = @Date 
               WHERE Drop_ID = @iDrop"


        cmd.Connection = MySqlConn
        cmd.CommandText = Sql
        cmd.Parameters.AddWithValue("@iDrop", iDrop)
        cmd.Parameters.AddWithValue("@fImg", arrImage)
        cmd.Parameters.AddWithValue("@Date", sDate)

        Dim r As Integer
        r = cmd.ExecuteNonQuery()
        If r > 0 Then
            'MsgBox("Record has been Saved!")
        Else
            MsgBox("No record has been saved!")
        End If
        cmd.Parameters.Clear()

    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try


    Return 0
End Function

要显示图像,我运行一个SELECT语句,然后将数据加载到image:

            Dim arrImage() As Byte
            arrImage = pTable.Rows(0).Item("Picture_Data")
            Dim mstream As New System.IO.MemoryStream(arrImage)
            OriginalPreviewImage = Image.FromStream(mstream)

正如我所说,这很有效。

在Android应用程序中,我将图像发送到PHP脚本并将其存储在数据库中,如下所示:

    // Attempt 1: Convert to base64 
 $image_base64 = base64_encode(file_get_contents($_FILES['image']['tmp_name']) );
 $image = 'data:image/'.$imageFileType.';base64,'.$image_base64;
//Attempt 2: use the received file directly
//$image = file_get_contents($_FILES['image']['tmp_name']) ;
//Attempt 3: Save thefiletodisk then to db
//$image = file_get_contents($file_path) ;
$query = "INSERT INTO Photos(Picture_Data) values('".$image."')";
mysqli_query($con,$query);
// Upload file
move_uploaded_file($_FILES['image']['tmp_name'],$upload_path.$name.$imageFileType);

(我首先检查记录是否存在然后根据需要更新或插入。代码未显示)。当我用Google搜索时,所有人都说使用base64,但是当出现错误时我意识到我在VB中没有这样做,所以我绑了几个其他的选择。记录是在数据库中创建的,我知道图片上传,因为我还将它保存到服务器上的文件夹,现在作为测试。 当我运行VB应用程序时,我在尝试显示图片时出现以下错误:

参数无效

在这一行:

OriginalPreviewImage = Image.FromStream(mstream)

它表示我的VB应用程序不喜欢我用PHP输入的数据。  Image.FromStream无法打开PHP数据。 如何让PHP将相同的格式保存到数据库中作为VB?

任何帮助表示赞赏。谢谢。

1 个答案:

答案 0 :(得分:0)

看起来我解决了自己的问题。

将我的PHP代码更改为以下内容:

$stmt = $con->prepare("INSERT INTO photos (Picture_Data, Drop_ID,  File_Path) VALUES(?,?,?)");
            $null = NULL;
            $stmt->bind_param("bis", $null, $dropId, $file_path);
            $stmt->send_long_data(0, file_get_contents($_FILES['image']['tmp_name']));
            $stmt->execute();

            move_uploaded_file($_FILES['image']['tmp_name'],$file_path);

send_long_data成功了。