开发者社区> 问答> 正文

python版osscmduploadfromdir遇到乱码的文件名就中断了

问题描述:


python版 osscmd uploadfromdir遇到乱码的文件名就中断了,错误提示:



Traceback (most recent call last):
  File "/usr/bin/osscmd", line 2305, in <module>
    res = CMD_LIST[cmd](args, options)
  File "/usr/bin/osscmd", line 1073, in cmd_upload_object_from_localdir
    total_upload_num += process_localfile(files)
  File "/usr/bin/osscmd", line 1055, in process_localfile
    object = "%s%s" % (prefix, object)
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 62-63: invalid continuation byte


我有200万+的图片文件要上传,到50万+时中断了,这个错误之前碰到过,就是文件名乱码导致的,手动改掉文件名就能解决。
但是现在的问题是文件太多,层级太深,不知道是哪个文件的问题,错误信息里也不提示文件路径。
请教:
如何使用 osscmd uploadfromdir 当遇到乱码的文件名时,跳过该文件,继续执行。


请知道的朋友告知一下,不胜感激!!!

展开
收起
lein 2015-07-02 10:29:24 6799 0
3 条回答
写回答
取消 提交回答
  • 回2楼robertzh的帖子
    问题是文件太多,层级太深,不知道是哪个文件的问题,错误信息里也不提示文件路径

    -------------------------

    Repython版osscmduploadfromdir遇到乱码的文件名就中断了
    附上解决方案:
    售后工程师 :osscmd中已经去做了相关编码,但还是有一些问题。

                    if prefix:
                        if prefix.endswith("/"):
                            object = "%s%s" % (prefix, object)
                        else:
                            object = "%s/%s" % (prefix, object)
                    content_type = ''
    看代码这个地方出的意外
    可以在这个地方加一个exception处理方式
    改成
                     object = get_object_name(smart_code(local_file), smart_code(local_path))
                     if prefix:
    -                    if prefix.endswith("/"):
    -                        object = "%s%s" % (prefix, object)
    -                    else:
    -                        object = "%s/%s" % (prefix, object)
    +                    try:
    +                        if prefix.endswith("/"):
    +                            object = "%s%s" % (prefix, object)
    +                        else:
    +                            object = "%s/%s" % (prefix, object)
    +                    except:
    +                        print sys.exc_info()[0], sys.exc_info()[1]
    +                        print "handle object name excpetion, skip"
    +                        continue
                     content_type = ''
                     queue.put((put_object, bucket, object, local_file, local_modify_time, is_replace, is_check_md5, content_type, multipart_threshold))
             qsize = queue.qsize()  
    2015-07-02 16:46:07

    阿里给出的解决方案和我想到的一样,只是跳过,没有参数可配置
    2015-07-03 09:49:30
    赞同 展开评论 打赏
  • 那就用英文替代呗
    2015-07-03 05:30:42
    赞同 展开评论 打赏
  • 这是简介
      
    2015-07-02 12:14:05
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载