黑莓 10 联系人图片到字节数组

Blackberry 10 contact pic to byte array

我正在处理移民申请。我必须将 blackberry 10 联系人转移到 android。

我在传输联系人照片时遇到问题。我正在获取图片的 uri,创建文件并尝试读取字节。

ContactPhoto contactPhoto = contact.primaryPhoto();
QString photo = contactPhoto.originalPhoto();
//photo = file:///accounts/1000/pimdata/_startup_data/contacts/2/img-tnqpx0.jpg
if (!photo.isEmpty()){
    QFile file(photo);
    if (file.open(QIODevice::ReadOnly)) {
       qDebug() <<"file.readAll() IF" <<file.readAll() <<endl;
    }else{
       qDebug() <<"file.readAll() ELSE" <<endl;
    }
    vcardString += "PHOTO;JPEG;ENCODING=BASE64:" + (file.readAll() + "\n");
}

但下面的部分代码正在执行

if (file.open(QIODevice::ReadOnly)) {
    qDebug() <<"file.readAll() IF" <<file.readAll() <<endl;
}else{
    qDebug() <<"file.readAll() ELSE" <<endl;
}

我如何从 uri 下面读取字节

file:///accounts/1000/pimdata/_startup_data/contacts/2/img-tnqpx0.jpg

如我所料,从 url 中删除 file:// 有效。

这是我用来测试的代码:

    bb::pim::contacts::ContactPhoto contactPhoto = contact.primaryPhoto();
    QString photo = contactPhoto.originalPhoto();
    if (!photo.isEmpty()){
        QFile file(photo.remove("file://"));
        if (file.open(QIODevice::ReadOnly)) {
           qDebug() <<"file.readAll() IF" <<file.readAll() <<endl;
        }else{
           qDebug() <<"file.readAll() ELSE" <<endl;
        }
    }

请注意,您需要在 url 前面留一个 /,这样您在 OP 中分享的图片 url 将如下所示:

/accounts/1000/pimdata/_startup_data/contacts/2/img-tnqpx0.jpg

此外,如果您的目标是创建一个VCard vcf文件,您不需要手动创建VCard文件内容,甚至不需要读取照片文件的字节,contactToVCard 功能会为你做到这一点。

QByteArray vcard = contactService.contactToVCard(contact.id(), bb::pim::contacts::VCardPhotoEncoding::BASE64, -1);
qDebug() << "vcard:" << vcard;