1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- package api
- import(
- "net/http"
- "encoding/json"
- "os"
- "mime/multipart"
- "crypto/rand"
- xls "../schedule"
- )
- func ImportPlanRoute(w http.ResponseWriter, r *http.Request){
- input, _, err := r.FormFile("uploadfile")
- if err != nil {
- json.NewEncoder(w).Encode(struct{Error string}{Error: "Error read upload file"})
- return
- }
- tempname := readFile(input)
- result := xls.ImportXLSX(tempname)
- json.NewEncoder(w).Encode(result)
- }
- func readFile(input multipart.File) string {
- var (
- size = uint64(0)
- buffer = make([]byte, 2 << 20) // 1MiB
- )
- tempname := GenerateRandomString(16) + ".xlsx"
- output, err := os.OpenFile(
- tempname,
- os.O_WRONLY|os.O_CREATE,
- 0666,
- )
- if err != nil {
- printError(err)
- return "error"
- }
- for {
- length, err := input.Read(buffer)
- if err != nil {
- printError(err)
- break
- }
- size += uint64(length)
- output.Write(buffer[:length])
- }
- input.Close()
- output.Close()
- return tempname
- }
- func GenerateRandomString(max int) string {
- var slice []byte = make([]byte, max)
- _, err := rand.Read(slice)
- if err != nil {
- printError(err)
- return ""
- }
- return string(slice)
- }
|