Correct method for new file/directory
parent
a48617de6a
commit
d0e7631bc8
|
@ -164,7 +164,7 @@ export default {
|
||||||
let promises = []
|
let promises = []
|
||||||
|
|
||||||
for (let file of files) {
|
for (let file of files) {
|
||||||
promises.push(api.put(this.$route.path + base + file.name, file))
|
promises.push(api.post(this.$route.path + base + file.name, file))
|
||||||
}
|
}
|
||||||
|
|
||||||
Promise.all(promises)
|
Promise.all(promises)
|
||||||
|
|
|
@ -202,7 +202,7 @@ export default {
|
||||||
|
|
||||||
// Del!
|
// Del!
|
||||||
if (event.keyCode === 46) {
|
if (event.keyCode === 46) {
|
||||||
if (this.showDeleteButton()) {
|
if (this.showDeleteButton) {
|
||||||
this.$store.commit('showHover', 'delete')
|
this.$store.commit('showHover', 'delete')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -215,7 +215,7 @@ export default {
|
||||||
|
|
||||||
// F2!
|
// F2!
|
||||||
if (event.keyCode === 113) {
|
if (event.keyCode === 113) {
|
||||||
if (this.showRenameButton()) {
|
if (this.showRenameButton) {
|
||||||
this.$store.commit('showHover', 'rename')
|
this.$store.commit('showHover', 'rename')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,7 @@ export default {
|
||||||
uri += this.name + '/'
|
uri += this.name + '/'
|
||||||
uri = uri.replace('//', '/')
|
uri = uri.replace('//', '/')
|
||||||
|
|
||||||
api.put(uri)
|
api.post(uri)
|
||||||
.then(() => {
|
.then(() => {
|
||||||
this.$router.push({ path: uri })
|
this.$router.push({ path: uri })
|
||||||
})
|
})
|
||||||
|
|
|
@ -34,7 +34,7 @@ export default {
|
||||||
uri += this.name
|
uri += this.name
|
||||||
uri = uri.replace('//', '/')
|
uri = uri.replace('//', '/')
|
||||||
|
|
||||||
api.put(uri)
|
api.post(uri)
|
||||||
.then(() => {
|
.then(() => {
|
||||||
this.$router.push({ path: uri })
|
this.$router.push({ path: uri })
|
||||||
})
|
})
|
||||||
|
|
|
@ -57,6 +57,27 @@ function rm (url) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function post (url, content = '') {
|
||||||
|
url = removePrefix(url)
|
||||||
|
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
let request = new window.XMLHttpRequest()
|
||||||
|
request.open('POST', `${store.state.baseURL}/api/resource${url}`, true)
|
||||||
|
request.setRequestHeader('Authorization', `Bearer ${store.state.jwt}`)
|
||||||
|
|
||||||
|
request.onload = () => {
|
||||||
|
if (request.status === 200) {
|
||||||
|
resolve(request.responseText)
|
||||||
|
} else {
|
||||||
|
reject(request.responseText)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
request.onerror = (error) => reject(error)
|
||||||
|
request.send(content)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
function put (url, content = '') {
|
function put (url, content = '') {
|
||||||
url = removePrefix(url)
|
url = removePrefix(url)
|
||||||
|
|
||||||
|
@ -175,6 +196,7 @@ export default {
|
||||||
checksum,
|
checksum,
|
||||||
move,
|
move,
|
||||||
put,
|
put,
|
||||||
|
post,
|
||||||
command,
|
command,
|
||||||
search,
|
search,
|
||||||
download
|
download
|
||||||
|
|
31
api.go
31
api.go
|
@ -77,9 +77,11 @@ func resourceHandler(c *requestContext, w http.ResponseWriter, r *http.Request)
|
||||||
case http.MethodDelete:
|
case http.MethodDelete:
|
||||||
return deleteHandler(c, w, r)
|
return deleteHandler(c, w, r)
|
||||||
case http.MethodPut:
|
case http.MethodPut:
|
||||||
return putHandler(c, w, r)
|
return postPutHandler(c, w, r)
|
||||||
|
case http.MethodPatch:
|
||||||
|
return patchHandler(c, w, r)
|
||||||
case http.MethodPost:
|
case http.MethodPost:
|
||||||
return postHandler(c, w, r)
|
return postPutHandler(c, w, r)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* // Execute beforeSave if it is a PUT request.
|
/* // Execute beforeSave if it is a PUT request.
|
||||||
|
@ -183,12 +185,30 @@ func deleteHandler(c *requestContext, w http.ResponseWriter, r *http.Request) (i
|
||||||
return http.StatusOK, nil
|
return http.StatusOK, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func putHandler(c *requestContext, w http.ResponseWriter, r *http.Request) (int, error) {
|
func postPutHandler(c *requestContext, w http.ResponseWriter, r *http.Request) (int, error) {
|
||||||
|
// Checks if the current request is for a directory and not a file.
|
||||||
if strings.HasSuffix(r.URL.Path, "/") {
|
if strings.HasSuffix(r.URL.Path, "/") {
|
||||||
|
// If the method is PUT, we return 405 Method not Allowed, because
|
||||||
|
// POST should be used instead.
|
||||||
|
if r.Method == http.MethodPut {
|
||||||
|
return http.StatusMethodNotAllowed, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Otherwise we try to create the directory.
|
||||||
err := c.us.FileSystem.Mkdir(context.TODO(), r.URL.Path, 0666)
|
err := c.us.FileSystem.Mkdir(context.TODO(), r.URL.Path, 0666)
|
||||||
return errorToHTTP(err, false), err
|
return errorToHTTP(err, false), err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If using POST method, we are trying to create a new file so it is not
|
||||||
|
// desirable to override an already existent file. Thus, we check
|
||||||
|
// if the file already exists. If so, we just return a 409 Conflict.
|
||||||
|
if r.Method == http.MethodPost {
|
||||||
|
if _, err := c.us.FileSystem.Stat(context.TODO(), r.URL.Path); err == nil {
|
||||||
|
return http.StatusConflict, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create/Open the file.
|
||||||
f, err := c.us.FileSystem.OpenFile(context.TODO(), r.URL.Path, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666)
|
f, err := c.us.FileSystem.OpenFile(context.TODO(), r.URL.Path, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666)
|
||||||
defer f.Close()
|
defer f.Close()
|
||||||
|
|
||||||
|
@ -196,22 +216,25 @@ func putHandler(c *requestContext, w http.ResponseWriter, r *http.Request) (int,
|
||||||
return errorToHTTP(err, false), err
|
return errorToHTTP(err, false), err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Copies the new content for the file.
|
||||||
_, err = io.Copy(f, r.Body)
|
_, err = io.Copy(f, r.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errorToHTTP(err, false), err
|
return errorToHTTP(err, false), err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Gets the info about the file.
|
||||||
fi, err := f.Stat()
|
fi, err := f.Stat()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errorToHTTP(err, false), err
|
return errorToHTTP(err, false), err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Writes the ETag Header.
|
||||||
etag := fmt.Sprintf(`"%x%x"`, fi.ModTime().UnixNano(), fi.Size())
|
etag := fmt.Sprintf(`"%x%x"`, fi.ModTime().UnixNano(), fi.Size())
|
||||||
w.Header().Set("ETag", etag)
|
w.Header().Set("ETag", etag)
|
||||||
return http.StatusOK, nil
|
return http.StatusOK, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func postHandler(c *requestContext, w http.ResponseWriter, r *http.Request) (int, error) {
|
func patchHandler(c *requestContext, w http.ResponseWriter, r *http.Request) (int, error) {
|
||||||
dst := r.Header.Get("Destination")
|
dst := r.Header.Get("Destination")
|
||||||
dst, err := url.QueryUnescape(dst)
|
dst, err := url.QueryUnescape(dst)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
Loading…
Reference in New Issue