func upSlack(api *slack.Client, attachment *multipart.FileHeader) (string, error) { upFile, err := ioutil.TempFile("", "upSlack_") defer os.Remove(upFile.Name()) f, err := attachment.Open() if err != nil { return "", fmt.Errorf("attached file open error: %v", err) } // file save written, err := io.Copy(upFile, f) if err != nil { return "", fmt.Errorf("file save error: %v, written: %d", err, written) } fileInfo, err := api.UploadFile(slack.FileUploadParameters{ File: upFile.Name(), Filename: attachment.Filename, }) if err != nil { return "", fmt.Errorf("file upload error: %v", err) } return fileInfo.URL, nil }