Linux Golang io.Copy()不在CentOS中复制文件

Linux Golang io.Copy()不在CentOS中复制文件,linux,file,go,io,server,Linux,File,Go,Io,Server,我是新来的。 下面的代码在windows中可以完美地工作,但在CentOS上不能。 我从客户端收到一个多部分文件。文件大小正确,读取时没有错误 我需要为上传用户创建特定目录,并将文件保存在其中。 目录创建得很好,但文件没有写入。 整个代码在任何阶段都不会出错。 我正在使用GoV1.5.1和BeeGo框架 代码如下: file , header , err := this.GetFile( "logo" ); defer func(){ err := file.C

我是新来的。 下面的代码在windows中可以完美地工作,但在CentOS上不能。 我从客户端收到一个多部分文件。文件大小正确,读取时没有错误

我需要为上传用户创建特定目录,并将文件保存在其中。 目录创建得很好,但文件没有写入。 整个代码在任何阶段都不会出错。 我正在使用GoV1.5.1和BeeGo框架

代码如下:

    file , header , err := this.GetFile( "logo" );

    defer func(){
        err := file.Close()
        if err != nil {
            fmt.Println( err.Error() )
        }
    }()


    size , seekErr := file.Seek( 0 , 2 )
    maxSize , _ := beego.AppConfig.Int64( "MaxSize" )

    if err != nil {

        response.Data = err.Error()
        response.Success = false

    } else if seekErr != nil {

        response.Data = seekErr.Error()
        response.Success = false

    } else if size > maxSize {

        response.Data = "File too large: " + string(size)
        response.Success = false

    } else {

        if _ , errDE := os.Stat( "static/media/business" ) ; os.IsNotExist( errDE ){
            os.Mkdir( "static/media/business" , os.ModeDir )
            os.Chmod( "static/media/business" , 0755 )
        }

        offset , err := file.Seek( 0 , 0 )

        if err != nil {
            fmt.Println( "Error seeking: " + err.Error() )
        }

        path := "static/media/business/" + u.( models.User ).Business.BusinessPage

        if _ , errDE := os.Stat( path ) ; os.IsNotExist( errDE ){
            os.Mkdir( path , os.ModeDir )
            os.Chmod( path , 0755 )
        }

        name := files.GenerateFileName( header.Filename , 24 )

        out , err := os.Create( path + "/" + name )

        if err != nil {

            response.Data = err.Error()
            response.Success = false

        } else {

            defer func(){
                err := out.Close()
                if err != nil {
                    fmt.Println( err.Error() )
                }
            }()

            _ , err = io.Copy( out , file )
            os.Chmod( path + "/" + name , 0755 )
            ...
有什么我遗漏的吗

更新


似乎我可以
io.Copy
复制到上述路径中的任何*.txt文件,但不能复制到图像文件。这是一个线索吗?

首先,您忽略返回的错误,例如从
os.Mkdir
os.Chdir
返回的错误。第二:在创建时,只检查
IsNotExist
,不处理例如
IsPermission
。您的目录可能有错误的权限:只有在创建目录时才使用
Chmod
;如果它已经存在,则您永远不会使用Chmod,这样它可能会拒绝写入。@Volker这些dir具有正确的权限,我不使用
Chdir
,并且
Mkdir
不返回任何错误。
io.Copy()
是否返回任何有意义的错误?首先,您忽略返回的错误,例如从
os.Mkdir
os.Chdir
返回的错误。第二:在创建时,只检查
IsNotExist
,不处理例如
IsPermission
。您的目录可能有错误的权限:只有在创建目录时才使用
Chmod
;如果它已经存在,则您永远不会修改它,这样它可能会拒绝写入。@Volker这些dir具有正确的权限,我不使用
Chdir
Mkdir
不返回任何错误。
io.Copy()
是否返回任何有意义的错误?