请问大神们,在做微信开发的时候,有的安卓上传不了图片怎么破? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zic
V2EX    Android

请问大神们,在做微信开发的时候,有的安卓上传不了图片怎么破?

  •  
  •   zic 2016-04-15 11:16:42 +08:00 14415 次点击
    这是一个创建于 3472 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在做一个小功能,类似去年挺火的「足迹」(还是「足记」?)的那种,你可以上传一张照片,然后服务端给加一些文字,只不过是通过微信完成的。

    有没有人才做微信开发的时候,遇到过类似情况:就是有些安卓机,如果图片是在 SD 卡里的,就上传不了。。。

    请教大神们,这个怎么破?
    12 条回复    2016-04-17 09:54:05 +08:00
    abc123ccc
        1
    abc123ccc  
       2016-04-15 12:55:09 +08:00
    这个和安桌系统有关的, 4.4 及以上版本,选择图片后, H5 FORM 上传的图片是没有文件名后缀的,扯蛋吧。我认为是安桌 APP 没有给我配置好,还和他们吵,最后我抓包对比,发现了这个问题,最后安桌的同事说,我杂知道安桌系统这么坑人呢。妈蛋,赞钱买苹果手机去。苦逼呀,我现在还在用山寨手机呢。
    lyhapple
        2
    lyhapple  
       2016-04-15 14:37:30 +08:00
    哈哈爽了, 这玩意我当时也折腾了好几天。后来发现和 android4.4 有关,直接贴给你解决方案,

    起因:

    在微信端 HTML5 上传文件时发现文件无法上传。

    原因:

    是安卓 4.4 的 bug , 安卓 5 以上无此问题, 不能错怪微信

    解决:

    使用百度团队开发的 webuploder 组件(ajax, html5, flash 上传解决方案)

    必须给 webuploder 初始化配置时设置 sendAsBinary 为 True

    后端 python 代码也需要接收二进制数据,与以往的写法不同, 主要区别是直接读取 request.body 的内容



    def handle_uploaded_binary_file(name, request_body, save_dir):
    try:
    if not os.path.exists(save_dir):
    os.makedirs(save_dir)
    ext = get_file_ext_name(name)
    filename = "%s.%s" % (uuid.uuid4(), ext)
    full_path = os.path.join(save_dir, filename)
    f = open(full_path, 'wb')
    f.write(request_body)
    f.close()
    except Exception, e:
    logger.exception(e)
    full_path = ''
    return full_path
    lyhapple
        3
    lyhapple  
       2016-04-15 14:38:04 +08:00   1
    幸好我记了笔记,不然我自己又会忘了是怎么解决的了
    zic
        4
    zic  
    OP
       2016-04-15 14:40:25 +08:00
    @lyhapple 哇,感谢,我试试
    其实我描述反了,是 sd 卡里的可以上传,手机内存里的传不了
    总之是有问题,我用你的方法试试
    crayygy
        5
    crayygy  
       2016-04-15 15:27:44 +08:00
    @lyhapple 哈哈,这个习惯真是好,不知道你用什么纪录的?
    wjfz
        6
    wjfz  
       2016-04-15 15:42:58 +08:00
    用微信自己的 JSSDK 啊。
    maelon
        7
    maelon  
       2016-04-15 15:45:25 +08:00
    前段时间也遇到过这个问题,然后自己写了这个东西 https://github.com/maelon/jIMGCompress.git ,原理是读取二进制文件,判断文件头,然后可以拿到文件类型
    subpo
        8
    subpo  
    PRO
       2016-04-15 15:47:29 +08:00
    用微信 sdk 不行吗?
    maelon
        9
    maelon  
       2016-04-15 15:50:06 +08:00
    如果业务只是针对微信,当然可以微信 sdk ,但是要求后端去下载图片,这中间交互比较麻烦 @subpo
    maelon
        10
    maelon  
       2016-04-15 15:53:32 +08:00
    @lyhapple 我也测了很多设备,发现就是微信的问题,跟 android4 估计关系不大,微信有可能是 app 处理的时候有问题。顺便吐槽下 android 微信内嵌腾迅 qq x5 内核,真恶心
    lyhapple
        11
    lyhapple  
       2016-04-16 11:09:38 +08:00
    @crayygy 用的笔记类软件啊, 为知笔记
    shineMicroxy
        12
    shineMicroxy  
       2016-04-17 09:54:05 +08:00
    如果是 Android M 一定要另外申请读写权限,光配置 Manifest 的 permission 还不够
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4998 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 09:38 PVG 17:38 LAX 02:38 JFK 05:38
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86