feat: add download endpoint
This commit is contained in:
parent
fb65690abd
commit
79fd550c54
|
@ -123,17 +123,66 @@ func (f *FilesService) PostUpload() {
|
||||||
ctx.JSON(&UploadResponse{Cid: fileCid})
|
ctx.JSON(&UploadResponse{Cid: fileCid})
|
||||||
}
|
}
|
||||||
|
|
||||||
func internalErrorCustom(ctx iris.Context, err error, customError error) bool {
|
func (f *FilesService) GetDownload() {
|
||||||
|
ctx := f.Ctx
|
||||||
|
|
||||||
|
cidString := ctx.URLParam("cid")
|
||||||
|
|
||||||
|
_, err := cid.Valid(cidString)
|
||||||
|
if sendError(ctx, err, iris.StatusBadRequest) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
cidObject, _ := cid.Decode(cidString)
|
||||||
|
hashHex := hex.EncodeToString(cidObject.Hash[:])
|
||||||
|
|
||||||
|
result := db.Get().Table("uploads").Where("hash = ?", hashHex).Row()
|
||||||
|
|
||||||
|
if result.Err() != nil {
|
||||||
|
sendError(ctx, result.Err(), iris.StatusNotFound)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
fetch, err := client.R().SetDoNotParseResponse(true).Get(fmt.Sprintf("/worker/objects/%s", hashHex))
|
||||||
|
if err != nil {
|
||||||
|
if fetch.StatusCode() == 404 {
|
||||||
|
sendError(ctx, err, iris.StatusNotFound)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
internalError(ctx, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.Header("Transfer-Encoding", "chunked")
|
||||||
|
|
||||||
|
internalError(ctx, err)
|
||||||
|
|
||||||
|
err = ctx.StreamWriter(func(w io.Writer) error {
|
||||||
|
_, err = io.Copy(w, fetch.RawBody())
|
||||||
|
_ = fetch.RawBody().Close()
|
||||||
|
return err
|
||||||
|
})
|
||||||
|
internalError(ctx, err)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func sendErrorCustom(ctx iris.Context, err error, customError error, irisError int) bool {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if customError != nil {
|
if customError != nil {
|
||||||
err = customError
|
err = customError
|
||||||
}
|
}
|
||||||
ctx.StopWithError(iris.StatusInternalServerError, err)
|
ctx.StopWithError(irisError, err)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
func internalError(ctx iris.Context, err error) bool {
|
func internalError(ctx iris.Context, err error) bool {
|
||||||
return internalErrorCustom(ctx, err, nil)
|
return sendErrorCustom(ctx, err, nil, iris.StatusInternalServerError)
|
||||||
|
}
|
||||||
|
func internalErrorCustom(ctx iris.Context, err error, customError error) bool {
|
||||||
|
return sendErrorCustom(ctx, err, customError, iris.StatusInternalServerError)
|
||||||
|
}
|
||||||
|
func sendError(ctx iris.Context, err error, irisError int) bool {
|
||||||
|
return sendErrorCustom(ctx, err, nil, irisError)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue