手机端直接生成VCF 文件 带生成头像

try{

 File file = File.createTempFile(uuid, ".vcf");
            String filePath = file.getPath();
            VcfUtil vcfUtil = new VcfUtil();
            vcfUtil.exportVcf(vo,file);
            BufferedInputStream br = new BufferedInputStream(new FileInputStream(file));
            byte[] buf = new byte[1024];
            int len = 0;

            response.reset(); // 非常重要
            if (isOnLine) { // 在线打开方式
                URL u = new URL("file:///" + filePath);
                response.setContentType(u.openConnection().getContentType());
                response.setHeader("Content-Disposition", "inline; filename=" + file.getName());
                // 文件名应该编码成UTF-8
            } else { // 纯下载方式
                response.setContentType("text/x-vcard");
                response.setHeader("Content-Disposition", "attachment; filename=" + file.getName());

            }
            OutputStream out = response.getOutputStream();
            while ((len = br.read(buf)) > 0)
                out.write(buf, 0, len);
            out.flush();
            br.close();
            out.close();
      }

vcf 本地生成 然后 在对方手机上下载临时文件

···


public class VcfUtil {

    public void exportVcf(AddressBeanVO bean, File file) {
        try {
            BufferedWriter reader = new BufferedWriter(new PrintWriter(file));
//            for (AddressBeanVO bean : addressBeans) {
            reader.write("BEGIN:VCARD");
            reader.write("\r\n");
            reader.write("VERSION:3.0");
            reader.write("\r\n");
            reader.write("N;CHARSET=utf-8:" + bean.getTrueName() + ";;;");
            reader.write("\r\n");
            reader.write("TITLE;CHARSET=utf-8:Partner");
            reader.write("\r\n");
            reader.write("ADR;WORK;POSTAL;CHARSET=utf-8:20/F, China Resources ");
            reader.write("\r\n");
            reader.write("Building, 8 Jianguome");
            reader.write("\r\n");
            if ("" != bean.getMobile() && bean.getMobile() != null) {
                reader.write("TEL;CELL:" + bean.getMobile() + "");
                reader.write("\r\n");
            }
            if ("" != bean.getWorkMobile() && bean.getWorkMobile() != null) {
                reader.write("TEL;WORK:" + bean.getWorkMobile() + "");
                reader.write("\r\n");
            }

            if ("" != bean.getTelePhone() && bean.getTelePhone() != null) {
                reader.write("TEL;HOME:" + bean.getTelePhone() + "");
                reader.write("\r\n");
            }
            if ("" != bean.getEmail() && bean.getEmail() != null) {
                reader.write("EMAIL:" + bean.getEmail() + "");
                reader.write("\r\n");
            }
            //头像转换
            if ("" != bean.getImage() && bean.getImage() != null) {
                reader.write("PHOTO;ENCODING=b;TYPE=PNG:" + bean.getAvatar().replace("\r\n", "") + "");
                reader.write("\r\n");
            }
            reader.write("END:VCARD");
            reader.write("\r\n");
//            }
            reader.flush();
            reader.close();


        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    /*
     * 编码
     */

    public static String qpEncodeing(String str) {
        char[] encode = str.toCharArray();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < encode.length; i++) {
            if ((encode[i] >= '!') && (encode[i] <= '~') && (encode[i] != '=') && (encode[i] != '\n')) {
                sb.append(encode[i]);
            } else if (encode[i] == '=') {
                sb.append("=3D");
            } else if (encode[i] == '\n') {
                sb.append("\n");
            } else {
                StringBuffer sbother = new StringBuffer();
                sbother.append(encode[i]);
                String ss = sbother.toString();
                byte[] buf = null;
                try {
                    buf = ss.getBytes("utf-8");
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
                if (buf.length == 3) {
                    for (int j = 0; j < 3; j++) {
                        String s16 = String.valueOf(Integer.toHexString(buf[j]));
                        // 抽取中文字符16进制字节的后两位,也就是=E8等号后面的两位,
                        // 三个代表一个中文字符
                        char c16_6;
                        char c16_7;
                        if (s16.charAt(6) >= 97 && s16.charAt(6) <= 122) {
                            c16_6 = (char) (s16.charAt(6) - 32);
                        } else {
                            c16_6 = s16.charAt(6);
                        }
                        if (s16.charAt(7) >= 97 && s16.charAt(7) <= 122) {
                            c16_7 = (char) (s16.charAt(7) - 32);
                        } else {
                            c16_7 = s16.charAt(7);
                        }
                        sb.append("=" + c16_6 + c16_7);
                    }
                }
            }
        }
        return sb.toString();
    }

}

传输图片格式为base64 格式 去空格 去标题头

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值