代码之家  ›  专栏  ›  技术社区  ›  Rutger Huijsmans

尝试通过API上传图像并将其存储在MySQL数据库中

  •  0
  • Rutger Huijsmans  · 技术社区  · 6 年前

    imageFile 我可以储存在数据库里的东西。

    我正试图将此图像存储到 blob 上的字段 image

    CREATE TABLE runkdb.uploaded_challenge (
        id int NOT NULL AUTO_INCREMENT,
        challenge_id int NOT NULL,
        user_id int NOT NULL,
        created_at DATETIME NOT NULL,
        image_caption TEXT,
        image_path varchar(255),
        image BLOB,
        score int DEFAULT 0,
        primary key (id)
    );
    

    这是试图存储数据的API函数的一部分:

    // Parse the request
    imageFile := make([]byte, 0)
    image, _, err := req.FormFile("image")
    if err != nil {
        // No image
        glog.Error("Error parsing image")
        responseMessage.Message = "Error parsing image"
        w.WriteHeader(400)
        json.NewEncoder(w).Encode(responseMessage)
        return
    } else {
        //if !strings.HasPrefix(fileHeader.Header["Content-Type"][0], "image") {
            // Something wrong with file type
        //}
        imageFile, err = ioutil.ReadAll(image)
        if err != nil {
            // Error reading uploaded image from stream
            glog.Error("Error reading image")
            responseMessage.Message = "Error reading image"
            w.WriteHeader(400)
            json.NewEncoder(w).Encode(responseMessage)
            return
        }
    }
    
    imageCaption := req.Form.Get("image_caption")
    
    // Create DB connection
    txn, err := api.db.Begin()
    if err != nil {
        glog.Error("Error creating database transaction")
        responseMessage.Message = "Error creating database transaction"
        w.WriteHeader(500)
        json.NewEncoder(w).Encode(responseMessage)
        return
    }
    
    t := time.Now()
    createdAtTimeString := fmt.Sprintf(t.Format("2006-01-02 15:04:05"))
    imageByteString := string(imageFile)
    query := fmt.Sprintf("INSERT INTO uploaded_challenge (challenge_id, user_id, created_at, image_caption, image) VALUES ('%d', '%d', '%s', '%s', '%s');", id, userID, createdAtTimeString, imageCaption, imageByteString)
    print(query)
    result, err := txn.Exec(query)
    if err != nil {
        txn.Rollback()
        glog.Error("Error inserting challenge into database")
        responseMessage.Message = "Error inserting challenge into database"
        w.WriteHeader(406)
        json.NewEncoder(w).Encode(responseMessage)
        return
    }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Rutger Huijsmans    6 年前

    通过转换我的 imageFile 对于这样的字符串:

    encodedImage := base64.StdEncoding.EncodeToString(imageFile)

    然后我把 encodedImage 进入我的数据库 image BLOB