我是Go的新手。 以下代码在Windows中完美运行,但在CentOS上运行不正常。 我从客户端收到一个multipart文件。该文件的大小正确,读取时没有错误。
我需要为上传用户创建特定目录并将文件保存在那里。 目录创建得很好,但文件没有写入。 整个代码在任何阶段都没有错误运行。 我正在使用Go v1.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文件,但不能到图像文件。这是一个线索吗?