Попытка загрузить изображение через API и сохранить его в базе данных MySQL. - PullRequest
0 голосов
/ 09 октября 2018

Поэтому я пытаюсь загрузить изображение через API и сохранить его в базе данных MySQL.Я не уверен, как преобразовать 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 Ответ

0 голосов
/ 09 октября 2018

Решил это путем преобразования моего imageFile в строку, подобную этой:

encodedImage := base64.StdEncoding.EncodeToString(imageFile)

Затем я сохранил encodedImage в столбце image моей базы данных (типа BLOB)

...