环境:WindowsXP

1、上传ico文件不认识,错误信息为:
Could not guess mimetype for images/favicon.ico. Using application/octet-stream

直接看源文件appcfg.py,发现打印出错误信息的函数是GetMimeTypeIfStaticFile,是根据mimetypes 这个模块来判断文件类型的。但mimetypes 这个模块导入的默认文件类型是在linux下的,windows下的不全,所以会导致文件判断出错。这时直接在函数里增加判断好了,见函数体中的红色部分。如果有别的媒体文件不认识,也可以如法炮制的。

def GetMimeTypeIfStaticFile(config, filename):
"""Looks up the mime type for ‘filename’.

Uses the handlers in ‘config’ to determine if the file should
be treated as a static file.

Args:
    config: The app.yaml object to check the filename against.
    filename: The name of the file.

Returns:
    The mime type string. For example, ’text/plain’ or ‘image/gif’.
    None if this is not a static file.
"""
for handler in config.handlers:
    handler_type = handler.GetHandlerType()
    if handler_type in ("static_dir", "static_files"):
      if handler_type == "static_dir":
        regex = os.path.join(re.escape(handler.GetHandler()), ".*")
      else:
        regex = handler.upload
      if re.match(regex, filename):
        if handler.mime_type is not None:
          return handler.mime_type
        else:
          if ‘.ico’ == filename[-4:]:
            guess = ‘image/x-icon’
          else:
            guess = mimetypes.guess_type(filename)[0]
          if guess is None:
            default = "application/octet-stream"
            print >>sys.stderr, ("Could not guess mimetype for %s. Using %s."
                                 % (filename, default))
            return default
          return guess
return None

2、上传文件,莫明其妙出错。
本来文件的path是default\templates\index.html,上传时莫明其妙变为default\templates~%index.html,其中index.html前面的乱码忘了是啥了,反正是乱码。这时也是上传不上去的。

忘了在哪里改了,反正修改思路就是在枚举文件的时侯,做了一个特殊处理,将乱码的path手工修改为正常的path名。

出现乱码的原因未知,反正前后是用了两台不同的电脑,其他的也没有什么特别的了。

函数里多用try,做好异常处理。