关于插入图片到golang服务器

自己搞了几天
发现有两种方法
第一种是把图片存入mysql
第二种种是把图片的路径存入mysql
请问哪种比较常用?
而且存入mysql的图片在golang里面用byte存储
那么服务器怎么写?

都没有golang的实例
自己写的就不贴出来了
自己都看不懂

共 10 个回复


a24729298

其实是第一种方法存进去了
但是直接看数据库的时候
依然为空

运行没错
网上说是权限问题
然后我把图片放在权限肯定有的地方
我确实能存进去
但是使劲上用起来实用性不大
查了下改权限的方法
感觉不是我这水平能看懂的

# 0

stevewang

mysql不适合用于存储文件。
直接让os来管理文件就可以。

# 1

a24729298

@stevewang
OS?操作系统?
也就是放在android那里?
那样不就是本地的
不能在另一家手机上看自己的图片了?

之前那个问题
你说的那个create if not exist不行啊

# 2

stevewang

我是指放在服务器的文件系统里。
用create if not exist建表有什么问题?
你可以查一下mysql的帮助。

# 3

a24729298

@stevewang
create if not exist我不是建表
我是建一个表头
然后在建表头之前判断表头是否存在
问用什么语句来判断?

文件系统啊
又学到一个新单词啊
又要查个几天了……
我现在看那个开源项目weed-fs应该就是文件系统的吧?

# 4

sneermorn

文件这种直接放服务器上或者专门整一个资源服务器或者就托管在第三方七牛之类的上面 很随意的

# 5

stevewang

你说的“表头”是指数据库表的字段?
那可以先用desc TableName获取所有字段列表,如果没有期望的字段再用alter TableName add ...命令来增加字段。

# 6

a24729298

@stevewang
我是用desc tablename colname来查询

如果查到了就会返回值
查不到就会返回空值

根据返回值来判断
func query1() {
db, err := sql.Open(“mysql”, “root:123456789@/logindemo?charset=utf8”)
checkErr(err)

a, err := db.Query(“desc user id”)
checkErr(err)

if a == “” {
fmt.Println(“1”)
} else {
fmt.Println(“2”)
}
// fmt.Println(a)

}
但是报错说type不对……..
invalid operation: a == “” (mismatched types sql.Rows and string)

# 7

stevewang

func HasColumn(db *sql.DB, table, column string) (bool, error) {
    row := db.QueryRow(fmt.Sprintf("desc %s %s", table, column))
    var c1, c2, c3, c4, c5, c6 sql.NullString
    err := row.Scan(&c1, &c2, &c3, &c4, &c5, &c6)
    if err == nil {
        return c1.Valid, nil
    }
    if err == sql.ErrNoRows {
        return false, nil
    }
    return false, err
}

func main() {
    db, err := sql.Open("mysql", "root:123456789@/logindemo?charset=utf8")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer db.Close()
    if _, err := db.Exec("create table if not exists TestTable(username varchar(32))"); err != nil {
        panic(err)
    }
    fmt.Println(HasColumn(db, "TestTable", "userid"))
    fmt.Println(HasColumn(db, "TestTable", "username"))
}
# 8

a24729298

@stevewang
我明白c1-c6的意思
但是不知道 sql.NullString的意义
因为我自己改你的代码
设的是
var c1, c2, c3, c4, c5, c6 string

# 9