好的,我们走了!
我目前正在开发一款iPhone应用程序,可用作教堂活动的安全检查系统。主要目标是能够为参与者搜索预先存在的MS SQL数据库,然后将其保存到iPhone / iPod Touch / iPad上的列表中。很容易。 MS SQL数据库中的一个字段是Image数据类型,其功能是以二进制形式存储参与者的图像。我目前不允许切换到varbinary(MAX)。
从iPhone上,我使用:
UIImage *image = [UIImage imageNamed:@"nameOfImage.jpg"];
NSData *imageData = UIImageJPEGRepresentation(image,1.0);
NSString *imageString = (NSString *)[[[NSString alloc] init] base64StringFromData:(NSData *)imageData];
您可能想知道base64StringFromData是什么。这是这里讨论的类别How do I do base64 encoding on iphone-sdk?
在类别中,它返回一个字符串作为NSASCIIStringEncoding。然后我使用POST将该字符串发送到Visual Basic Web服务。
在下面假设我已经设置并打开了我的SQL连接,并初始化了一个SQL数据适配器和命令。所以函数看起来类似于:
Public Function sendCommand(ByVal image As String) As String
Dim commandString As String
commandString = "insert into phoneApp(image) values(@image)"
Dim encoding As New System.Text.UTF8Encoding
sqlDataAdapter.InsertCommand = (commandString, sqlConnection)
sqlDataAdapter.InsertCommand.Parameters.Add(@"image", SqlDbType.Image, image.length).Value = encoding.GetBytes(image)
sqlDataAdapter.ExecuteNonQuery()
End Function
现在,最后,这是正在发生的事情。在另一个函数中,我调用Response.BinaryWrite(SqlDataReader.Item(“image”))。在Internet Explorer中,执行此操作会使图像显示在浏览器中。相反,它以base64形式显示字符串。将该字符串复制并粘贴到网上的base64转换器中,它可以正常工作。因此,iPhone上的编码确实正确编码为base64。
这是问题所在。我是否需要编码到base64以保存到图像数据类型,或者我应该专注于学习如何将NSData编码为不同的二进制字符串?
答案 0 :(得分:0)
我弄清楚了,并且会将答案留给任何偶然发现的人。在编程中祝你好运。
它实际上比我想象的要简单得多。只需使用System.Convert传入InsertCommand上的字节。
sqlDataAdapter.InsertCommand = (commandString, sqlConnection)
sqlDataAdapter.InsertCommand.Parameters.Add(@"image", SqlDbType.Image, image.length).Value = System.Convert.FromBase64String(image)
sqlDataAdapter.ExecuteNonQuery()
本质上,我得到了编码字符串的字节,但从未在线上进一步解码。所以我在插入表之前使用Convert停止了双重编码。