mirror of
https://github.com/haiwen/seafile-server.git
synced 2025-09-25 14:42:52 +00:00
Get filename from mime header (#767)
Co-authored-by: Heran Yang <heran.yang@seafile.com>
This commit is contained in:
@@ -1348,21 +1348,9 @@ func writeBlockDataToTmpFile(r *http.Request, fsm *recvData, formFiles map[strin
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
disposition := r.Header.Get("Content-Disposition")
|
filename, err := getFileNameFromMimeHeader(r)
|
||||||
if disposition == "" {
|
|
||||||
err := fmt.Errorf("missing content disposition")
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
_, params, err := mime.ParseMediaType(disposition)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err := fmt.Errorf("failed to parse Content-Disposition: %v", err)
|
return fmt.Errorf("failed to get filename from mime header: %w", err)
|
||||||
return err
|
|
||||||
}
|
|
||||||
filename, err := url.QueryUnescape(params["filename"])
|
|
||||||
if err != nil {
|
|
||||||
err := fmt.Errorf("failed to get filename: %v", err)
|
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
handler := fileHeaders[0]
|
handler := fileHeaders[0]
|
||||||
@@ -1374,7 +1362,6 @@ func writeBlockDataToTmpFile(r *http.Request, fsm *recvData, formFiles map[strin
|
|||||||
defer file.Close()
|
defer file.Close()
|
||||||
|
|
||||||
var f *os.File
|
var f *os.File
|
||||||
//filename := handler.Filename
|
|
||||||
filePath := filepath.Join("/", parentDir, filename)
|
filePath := filepath.Join("/", parentDir, filename)
|
||||||
tmpFile, err := repomgr.GetUploadTmpFile(repoID, filePath)
|
tmpFile, err := repomgr.GetUploadTmpFile(repoID, filePath)
|
||||||
if err != nil || tmpFile == "" {
|
if err != nil || tmpFile == "" {
|
||||||
@@ -1393,8 +1380,7 @@ func writeBlockDataToTmpFile(r *http.Request, fsm *recvData, formFiles map[strin
|
|||||||
}
|
}
|
||||||
|
|
||||||
if fsm.rend == fsm.fsize-1 {
|
if fsm.rend == fsm.fsize-1 {
|
||||||
fileName := filepath.Base(filename)
|
fsm.fileNames = append(fsm.fileNames, filepath.Base(filename))
|
||||||
fsm.fileNames = append(fsm.fileNames, normalizeUTF8Path(fileName))
|
|
||||||
fsm.files = append(fsm.files, tmpFile)
|
fsm.files = append(fsm.files, tmpFile)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1405,6 +1391,27 @@ func writeBlockDataToTmpFile(r *http.Request, fsm *recvData, formFiles map[strin
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getFileNameFromMimeHeader(r *http.Request) (string, error) {
|
||||||
|
disposition := r.Header.Get("Content-Disposition")
|
||||||
|
if disposition == "" {
|
||||||
|
err := fmt.Errorf("missing content disposition")
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
_, params, err := mime.ParseMediaType(disposition)
|
||||||
|
if err != nil {
|
||||||
|
err := fmt.Errorf("failed to parse Content-Disposition: %v", err)
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
filename, err := url.QueryUnescape(params["filename"])
|
||||||
|
if err != nil {
|
||||||
|
err := fmt.Errorf("failed to get filename: %v", err)
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
return normalizeUTF8Path(filename), nil
|
||||||
|
}
|
||||||
|
|
||||||
func createRelativePath(repoID, parentDir, relativePath, user string) *appError {
|
func createRelativePath(repoID, parentDir, relativePath, user string) *appError {
|
||||||
if relativePath == "" {
|
if relativePath == "" {
|
||||||
return nil
|
return nil
|
||||||
|
Reference in New Issue
Block a user