Golang中国

使用beego做一个上传功能,使用如下代码:

// 获取上传文件
    f, h, err := this.GetFile("editormd-image-file")
    if err == nil {
        // 关闭文件
        f.Close()
    }

    if err != nil {
        // 获取错误则输出错误信息
        this.Data["json"] = map[string]interface{}{"success": 0, "message": err.Error()}
        this.ServeJson()
        return
    }

    // 获取当前年月
    datePath := time.Now().Format("2006/01")
    // 设置保存目录
    dirPath := "./upload/" + datePath

    // 设置保存文件名
    FileName := h.Filename

    // 将文件保存到服务器中
    err = this.SaveToFile("editormd-image-file", fmt.Sprintf("%s/%s", dirPath, FileName))
    if err != nil {
        // 出错则输出错误信息
        this.Data["json"] = map[string]interface{}{"success": 0, "message": err.Error()}
        this.ServeJson()
        return
    }

前端使用的editor.md,上传一切正常,但是却发现,如果我一直连续上传,传个三四福图左右,那么就会出现一个情况,在上传目录下会出现tmp这个临时文件夹,而且不会自动删除,也就是表明我的文件并没有被正确关闭,可是我已经在程序里关闭了啊!
而且,出现这样的情况时候,会发现,现在只要刷新,那么之前注册的静态文件也会失效,服务端直接报错:

2015/07/01 01:24:28 [staticfile.go:61] [W] GetFileAttributesEx static/css/admin.
css: The system cannot find the path specified.
2015/07/01 01:24:28 [staticfile.go:61] [W] GetFileAttributesEx static/img/logo.p
ng: The system cannot find the path specified.
2015/07/01 01:24:28 [staticfile.go:61] [W] GetFileAttributesEx static/js/editor/
css/editormd.min.css: The system cannot find the path specified.
2015/07/01 01:24:28 [staticfile.go:61] [W] GetFileAttributesEx static/js/validat
ion/bootstrapValidator.js: The system cannot find the path specified.
2015/07/01 01:24:28 [staticfile.go:61] [W] GetFileAttributesEx static/js/editor/
editormd.min.js: The system cannot find the path specified.
2015/07/01 01:24:28 [staticfile.go:61] [W] GetFileAttributesEx static/js/tagsinp
ut/bootstrap-tagsinput.js: The system cannot find the path specified.
2015/07/01 01:24:28 [staticfile.go:61] [W] GetFileAttributesEx static/js/admin.j
s: The system cannot find the path specified.

请问谁知道这是什么原因么?谢谢了!

4 回复
sdrzlyz
#1 sdrzlyz • 2015-07-01 10:11

1、static/js/admin.js这些错误是找不到资源文件,跟上传没有关系。自行检查html head的内容。

2、从代码中也没有看到相关tmp文件夹的创建与写入操作。完全不知所云。看你的代码,好像是用的beego框架,如果是这样,那个文件夹里面存的是session。可以说与你的上传没有神马关系。

ylqjgm
#2 ylqjgm • 2015-07-01 11:31

@sdrzlyz 不好意思,可能是我描述的不清楚

  1. 那些错误所说的资源文件都是存在的,是我之前使用

    beego.SetStaticPath("/static", "static")
    `
    

    注册过的,但是只要出现了临时文件未清理的情况,就会报错,找不到资源了。。。

  2. 代码中的确没有对tmp文件夹的创建和写入,是beego自己完成的,操作就是

    err = this.SaveToFile("editormd-image-file", fmt.Sprintf("%s/%s", dirPath, FileName))
    

    这行代码,我也不清楚这个文件夹里到底是不是保存session的,反正都是直接出现在我的upload目录里,只要出现这个目录,就会报错

lixiao_fly
#3 lixiao_fly • 2015-11-04 18:36

请问楼主,这个问题您解决了吗?我刚好学到这儿。

nanhuai
#4 nanhuai • 2017-03-19 14:04

楼主,能详细讲一下editormd的图片上传是怎么做的吗?可以讲下大概流程?

需要 登录 后方可回复, 如果你还没有账号你可以 注册 一个帐号。