woj-server/pkg/down/down.go
Paul Pan d42ee0ce54 feat: a big update
1. merge woj-runner scripts into woj-server
2. add woj-runner app
3. refactor submission status problem ...
4. jwt middleware update

Co-authored-by: cxy004 <cxy004@qq.com>
Co-authored-by: wzt <w.zhongtao@qq.com>
2022-10-22 17:38:39 +08:00

56 lines
850 B
Go

package down
import (
"fmt"
"github.com/WHUPRJ/woj-server/pkg/utils"
"io"
"net/http"
"os"
"path/filepath"
)
func Down(dest string, url string) error {
dir := filepath.Dir(dest)
err := os.MkdirAll(dir, 0755)
if err != nil {
return err
}
tmp := fmt.Sprintf("%s.%s", dest, utils.RandomString(5))
f, err := os.Create(tmp)
if err != nil {
return err
}
resp, err := http.Get(url)
if err != nil {
return err
}
defer func(Body io.ReadCloser) {
_ = Body.Close()
}(resp.Body)
if resp.StatusCode != http.StatusOK {
_ = os.Remove(tmp)
return fmt.Errorf("bad status %s when accessing %s", resp.Status, url)
}
_, err = io.Copy(f, resp.Body)
if err != nil {
return err
}
err = f.Close()
if err != nil {
return err
}
err = os.Rename(tmp, dest)
if err != nil {
_ = os.Remove(dest)
return err
}
return nil
}