Linux Golang io.Copy()不在CentOS中复制文件
我是新来的。 下面的代码在windows中可以完美地工作,但在CentOS上不能。 我从客户端收到一个多部分文件。文件大小正确,读取时没有错误 我需要为上传用户创建特定目录,并将文件保存在其中。 目录创建得很好,但文件没有写入。 整个代码在任何阶段都不会出错。 我正在使用GoV1.5.1和BeeGo框架 代码如下: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
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()
是否返回任何有意义的错误?