我有一个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?
任何帮助表示赞赏。谢谢。
答案 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成功了。