1
0
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:
feiniks
2025-07-19 11:52:04 +08:00
committed by GitHub
parent 7e34ec50f9
commit eb88aeac90

View File

@@ -1348,21 +1348,9 @@ func writeBlockDataToTmpFile(r *http.Request, fsm *recvData, formFiles map[strin
return err
}
disposition := r.Header.Get("Content-Disposition")
if disposition == "" {
err := fmt.Errorf("missing content disposition")
return err
}
_, params, err := mime.ParseMediaType(disposition)
filename, err := getFileNameFromMimeHeader(r)
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 fmt.Errorf("failed to get filename from mime header: %w", err)
}
handler := fileHeaders[0]
@@ -1374,7 +1362,6 @@ func writeBlockDataToTmpFile(r *http.Request, fsm *recvData, formFiles map[strin
defer file.Close()
var f *os.File
//filename := handler.Filename
filePath := filepath.Join("/", parentDir, filename)
tmpFile, err := repomgr.GetUploadTmpFile(repoID, filePath)
if err != nil || tmpFile == "" {
@@ -1393,8 +1380,7 @@ func writeBlockDataToTmpFile(r *http.Request, fsm *recvData, formFiles map[strin
}
if fsm.rend == fsm.fsize-1 {
fileName := filepath.Base(filename)
fsm.fileNames = append(fsm.fileNames, normalizeUTF8Path(fileName))
fsm.fileNames = append(fsm.fileNames, filepath.Base(filename))
fsm.files = append(fsm.files, tmpFile)
}
@@ -1405,6 +1391,27 @@ func writeBlockDataToTmpFile(r *http.Request, fsm *recvData, formFiles map[strin
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 {
if relativePath == "" {
return nil