【发布时间】:2011-03-02 21:20:08
【问题描述】:
好的,我们开始吧!
我目前正在开发一款 iPhone 应用程序,该应用程序将用作教堂活动的安全登记系统。主要目标是能够在预先存在的 MS SQL 数据库中搜索参与者,然后将它们保存到 iPhone/iPod Touch/iPad 上的列表中。很容易。 MS SQL 数据库中的字段之一是图像数据类型,其功能是将参与者的图像以二进制形式存储。我目前不允许切换到 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 编码为不同的二进制字符串?
【问题讨论】:
标签: asp.net objective-c visual-studio ios base64