V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Zuckonit
V2EX  ›  问与答

bottlepy 上传 1G 大小的文件报错: No space left on device, (存到 home 子目录)

  •  
  •   Zuckonit · 2014-05-26 10:47:55 +08:00 · 3135 次点击
    这是一个创建于 3864 天前的主题,其中的信息可能已经有所发展或是发生改变。
    IOError: [Errno 28] No space left on device
    ~ ❯ df -h
    Filesystem Size Used Avail Use% Mounted on
    /dev/sda1 18G 9.4G 7.1G 57% /
    dev 1.5G 0 1.5G 0% /dev
    run 1.5G 28M 1.5G 2% /run
    tmpfs 1.5G 0 1.5G 0% /dev/shm
    tmpfs 1.5G 0 1.5G 0% /sys/fs/cgroup
    tmpfs 1.5G 1002M 481M 68% /tmp
    tmpfs 297M 4.0K 297M 1% /run/user/1000
    3 条回复
    tolbkni
        1
    tolbkni  
       2014-05-26 11:04:26 +08:00   ❤️ 1
    bottlepy 上传文件时会先暂存到 /tmp 文件夹,上传完成后再移动到指定位置。
    很明显 /tmp 空间不够了
    Zuckonit
        2
    Zuckonit  
    OP
       2014-05-26 11:24:17 +08:00
    好吧, 果然是。。
    改了下tempfile.tempdir貌似ok了。
    看了下bottle相关代码:
    @DictProperty('environ', 'bottle.request.body', read_only=True)
    def _body(self):
    maxread = max(0, self.content_length)
    stream = self.environ['wsgi.input']
    body = BytesIO() if maxread < self.MEMFILE_MAX else TemporaryFile(mode='w+b')
    while maxread > 0:
    part = stream.read(min(maxread, self.MEMFILE_MAX))
    if not part: break
    body.write(part)
    maxread -= len(part)
    self.environ['wsgi.input'] = body
    body.seek(0)
    return body
    当body大于self.MEMFILE_MAX (100M)的时候, 会存到tmp目录
    Zuckonit
        3
    Zuckonit  
    OP
       2014-05-26 11:24:48 +08:00
    不知道怎么贴代码。。sorry
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5886 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 02:02 · PVG 10:02 · LAX 18:02 · JFK 21:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.