V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zic
V2EX  ›  Android

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

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

    有没有人才做微信开发的时候,遇到过类似情况:就是有些安卓机,如果图片是在 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  
       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   ·   实用小工具   ·   988 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 22:58 · PVG 06:58 · LAX 14:58 · JFK 17:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.