mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2024-01-19 02:48:24 +00:00
Issue 6: upload file without id specified
This commit is contained in:
parent
952974491b
commit
d51c8d37bd
|
@ -58,13 +58,13 @@ type AssignResult struct {
|
||||||
Error string `json:"error"`
|
Error string `json:"error"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func assign(count int) (*AssignResult, error) {
|
func Assign(server string, count int) (*AssignResult, error) {
|
||||||
values := make(url.Values)
|
values := make(url.Values)
|
||||||
values.Add("count", strconv.Itoa(count))
|
values.Add("count", strconv.Itoa(count))
|
||||||
if *uploadReplication != "" {
|
if *uploadReplication != "" {
|
||||||
values.Add("replication", *uploadReplication)
|
values.Add("replication", *uploadReplication)
|
||||||
}
|
}
|
||||||
jsonBlob, err := util.Post("http://"+*server+"/dir/assign", values)
|
jsonBlob, err := util.Post("http://"+server+"/dir/assign", values)
|
||||||
debug("assign result :", string(jsonBlob))
|
debug("assign result :", string(jsonBlob))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -118,7 +118,7 @@ func submit(files []string) ([]SubmitResult, error) {
|
||||||
for index, file := range files {
|
for index, file := range files {
|
||||||
results[index].FileName = file
|
results[index].FileName = file
|
||||||
}
|
}
|
||||||
ret, err := assign(len(files))
|
ret, err := Assign(*server, len(files))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
for index, _ := range files {
|
for index, _ := range files {
|
||||||
results[index].Error = err.Error()
|
results[index].Error = err.Error()
|
||||||
|
|
|
@ -6,7 +6,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
VERSION = "0.37"
|
VERSION = "0.38"
|
||||||
)
|
)
|
||||||
|
|
||||||
var cmdVersion = &Command{
|
var cmdVersion = &Command{
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"code.google.com/p/weed-fs/go/operation"
|
"code.google.com/p/weed-fs/go/operation"
|
||||||
"code.google.com/p/weed-fs/go/replication"
|
"code.google.com/p/weed-fs/go/replication"
|
||||||
"code.google.com/p/weed-fs/go/storage"
|
"code.google.com/p/weed-fs/go/storage"
|
||||||
|
@ -99,6 +100,47 @@ func freezeVolumeHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
debug("freeze volume =", r.FormValue("volume"), ", error =", err)
|
debug("freeze volume =", r.FormValue("volume"), ", error =", err)
|
||||||
}
|
}
|
||||||
|
func submitForClientHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
m := make(map[string]interface{})
|
||||||
|
if r.Method != "POST" {
|
||||||
|
m["error"] = "Only submit via POST!"
|
||||||
|
writeJsonQuiet(w, r, m)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
debug("parsing upload file...")
|
||||||
|
fname, data, mimeType, isGzipped, lastModified, pe := storage.ParseUpload(r)
|
||||||
|
if pe != nil {
|
||||||
|
writeJsonError(w, r, pe)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
debug("assigning file id for", fname)
|
||||||
|
assignResult, ae := Assign(*masterNode, 1)
|
||||||
|
if ae != nil {
|
||||||
|
writeJsonError(w, r, ae)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
url := "http://" + assignResult.PublicUrl + "/" + assignResult.Fid
|
||||||
|
if lastModified != 0 {
|
||||||
|
url = url + "?ts=" + strconv.FormatUint(lastModified, 10)
|
||||||
|
}
|
||||||
|
|
||||||
|
debug("upload file to store", url)
|
||||||
|
uploadResult, err := operation.Upload(url, fname, bytes.NewReader(data), isGzipped, mimeType)
|
||||||
|
if err != nil {
|
||||||
|
writeJsonError(w, r, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
m["fileName"] = fname
|
||||||
|
m["fid"] = assignResult.Fid
|
||||||
|
m["fileUrl"] = assignResult.PublicUrl + "/" + assignResult.Fid
|
||||||
|
m["size"] = uploadResult.Size
|
||||||
|
writeJsonQuiet(w, r, m)
|
||||||
|
return
|
||||||
|
}
|
||||||
func storeHandler(w http.ResponseWriter, r *http.Request) {
|
func storeHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
switch r.Method {
|
switch r.Method {
|
||||||
case "GET":
|
case "GET":
|
||||||
|
@ -199,22 +241,19 @@ func PostHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
m := make(map[string]interface{})
|
m := make(map[string]interface{})
|
||||||
if e := r.ParseForm(); e != nil {
|
if e := r.ParseForm(); e != nil {
|
||||||
debug("form parse error:", e)
|
debug("form parse error:", e)
|
||||||
m["error"] = e.Error()
|
writeJsonError(w, r, e)
|
||||||
writeJsonQuiet(w, r, m)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
vid, _, _, _ := parseURLPath(r.URL.Path)
|
vid, _, _, _ := parseURLPath(r.URL.Path)
|
||||||
volumeId, ve := storage.NewVolumeId(vid)
|
volumeId, ve := storage.NewVolumeId(vid)
|
||||||
if ve != nil {
|
if ve != nil {
|
||||||
debug("NewVolumeId error:", ve)
|
debug("NewVolumeId error:", ve)
|
||||||
m["error"] = ve.Error()
|
writeJsonError(w, r, ve)
|
||||||
writeJsonQuiet(w, r, m)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
needle, ne := storage.NewNeedle(r)
|
needle, ne := storage.NewNeedle(r)
|
||||||
if ne != nil {
|
if ne != nil {
|
||||||
m["error"] = ne.Error()
|
writeJsonError(w, r, ne)
|
||||||
writeJsonQuiet(w, r, m)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
ret, errorStatus := replication.ReplicatedWrite(*masterNode, store, volumeId, needle, r)
|
ret, errorStatus := replication.ReplicatedWrite(*masterNode, store, volumeId, needle, r)
|
||||||
|
@ -337,6 +376,7 @@ func runVolume(cmd *Command, args []string) bool {
|
||||||
store = storage.NewStore(*vport, *ip, *publicUrl, folders, maxCounts)
|
store = storage.NewStore(*vport, *ip, *publicUrl, folders, maxCounts)
|
||||||
defer store.Close()
|
defer store.Close()
|
||||||
http.HandleFunc("/", storeHandler)
|
http.HandleFunc("/", storeHandler)
|
||||||
|
http.HandleFunc("/submit", submitForClientHandler)
|
||||||
http.HandleFunc("/status", statusHandler)
|
http.HandleFunc("/status", statusHandler)
|
||||||
http.HandleFunc("/admin/assign_volume", assignVolumeHandler)
|
http.HandleFunc("/admin/assign_volume", assignVolumeHandler)
|
||||||
http.HandleFunc("/admin/vacuum_volume_check", vacuumVolumeCheckHandler)
|
http.HandleFunc("/admin/vacuum_volume_check", vacuumVolumeCheckHandler)
|
||||||
|
|
|
@ -210,6 +210,11 @@ func writeJsonQuiet(w http.ResponseWriter, r *http.Request, obj interface{}) {
|
||||||
log.Printf("error writing JSON %s: %s", obj, err)
|
log.Printf("error writing JSON %s: %s", obj, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
func writeJsonError(w http.ResponseWriter, r *http.Request, err error) {
|
||||||
|
m := make(map[string]interface{})
|
||||||
|
m["error"] = err.Error()
|
||||||
|
writeJsonQuiet(w, r, m)
|
||||||
|
}
|
||||||
|
|
||||||
func debug(params ...interface{}) {
|
func debug(params ...interface{}) {
|
||||||
if *IsDebug {
|
if *IsDebug {
|
||||||
|
|
Loading…
Reference in a new issue