sbzhu / weworkapi_php

official lib of wework api
https://work.weixin.qq.com/api/doc
355 stars 286 forks source link

上传临时素材,并以文件形式推送给用户,文件名变成了整个路径,如何解决? #15

Closed xiaoyouxi01 closed 6 years ago

xiaoyouxi01 commented 6 years ago

用\api\examples\MediaTest.php测试,比如上传一个文件abc.docx。 上传后取得media_id,通过消息推送接口,将这个media_id以文件形式,通过某个自建应用发送给用户。 这时用户收到文件,显示的文件名是“D:\xxx\xxxx\xxxxx\xxxx\abc.docx”,文件名是整个路径。 能否修改下SDK,让上传的文件名还是原先的文件名?或者哪里可以设置下文件名吗?

sbzhu commented 6 years ago

image

看了下,我upload这里用了 realpath 来获取绝对路径。 试了下去掉它既可,当然前提是要先把执行路径切到文件所在路径,不然会读取失败。

http://php.net/curlfile 如果你当前版本支持curlfile的话,应该可以使用setPostFilename函数设置它的name

xiaoyouxi01 commented 6 years ago

非常感谢指点!! 我看了下curlfile类,原来__construct方法里还有两个可选参数啊!第三个参数直接传入文件名就可以了!

        // 兼容php5.3-5.6 curl模块的上传操作
        $args = null;
        if (class_exists('\CURLFile')) {
            $args = array('media' => new \CURLFile(realpath($filePath), 'application/octet-stream', basename($filePath)));
            var_dump($args);
        } else {
            $args = array('media' => '@' . realpath($filePath));
        }
sbzhu commented 6 years ago

嗯嗯,和调用setPostFilename一样的,我改到git