转到 http:从 Qt 客户端发送图像后没有这样的文件

我有一个 Go API,它应该保存客户端发送的图像。我知道当 POST 请求来自 HTML 表单时,Go 代码有效。但是,当从我的 Qt C++ 客户端发送多部分发布请求时,服务器返回错误


http: 没有这样的文件


在客户端,我有一个 QPixmap,我将其转换为 QByteArray,然后发送,但不知何故我从 Go 中得到了该错误。我知道当我删除时客户端发送的数据长度减少


multi_part->append(image_part);

所以应该发送 QPixmap。


去代码:


func apiUploadHandler(w http.ResponseWriter, req *http.Request) {

if req.Method == "POST" {

    req.ParseMultipartForm(0)

    fmt.Printf("%v %v %v", req.RemoteAddr, req.ContentLength, req.Body)

    file, fileheader, err := req.FormFile("image")

    if err != nil {

        cio.PrintMessage(1, err.Error())

        return

    }

    defer file.Close()

    var id string

    created := false

    for created != true {

        id = generateImageID()

        err = db.CheckIfImageIDInUse(id)

        if err != nil {

            if err.Error() == "Image ID '"+id+"' exists.'" {

                created = false

                continue

            } else {

                created = false

                cio.PrintMessage(1, err.Error())

                return

            }

        }

        created = true

    }

    filePath := fsys.ImgStoragePath + id + "." + strings.Split(fileheader.Filename, ".")[1]

    err = db.StoreImage(id, strings.Split(fileheader.Filename, ".")[0] /*image name*/, filePath, strings.Split(fileheader.Filename, ".")[1] /*extension*/)

    if err != nil {

        cio.PrintMessage(1, err.Error())

        return

    }

    bytesCopied, err := fsys.StoreImage(filePath, file)

    if err != nil {

        cio.PrintMessage(1, err.Error())

        return

    }

    cio.PrintMessage(0, "File "+filePath+" has been created.")

    if err != nil {

        cio.PrintMessage(1, err.Error())

        return

    }

    cio.PrintMessage(0, "Content of uploaded image ("+strconv.FormatInt(bytesCopied, 10)+" Bytes) has been copied to "+filePath+".")

    http.Redirect(w, req, "/"+id, http.StatusFound)

}


}



胡子哥哥
浏览 145回答 1
1回答

慕的地10843

我不确定,但你可以尝试改变image_part.setHeader(QNetworkRequest::ContentDispositionHeader,  QVariant("form-data; name=\"image\""));像image_part.setHeader(QNetworkRequest::ContentDispositionHeader,  QVariant("form-data; name=\"image\"; filename=\"Screenshot.png\""));
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go