mirror of
https://github.com/wgh136/nysoure.git
synced 2025-09-27 04:17:23 +00:00
Add cancel upload functionality to file API
This commit is contained in:
@@ -456,6 +456,19 @@ class Network {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async cancelFileUpload(fileId: number): Promise<Response<void>> {
|
||||||
|
try {
|
||||||
|
const response = await axios.post(`${this.apiBaseUrl}/files/upload/cancel/${fileId}`);
|
||||||
|
return response.data;
|
||||||
|
} catch (e: any) {
|
||||||
|
console.error(e);
|
||||||
|
return {
|
||||||
|
success: false,
|
||||||
|
message: e.toString(),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async createRedirectFile(filename: string, description: string,
|
async createRedirectFile(filename: string, description: string,
|
||||||
resourceId: number, redirectUrl: string): Promise<Response<RFile>> {
|
resourceId: number, redirectUrl: string): Promise<Response<RFile>> {
|
||||||
try {
|
try {
|
||||||
|
@@ -14,6 +14,7 @@ func AddFileRoutes(router fiber.Router) {
|
|||||||
fileGroup.Post("/upload/init", initUpload)
|
fileGroup.Post("/upload/init", initUpload)
|
||||||
fileGroup.Post("/upload/block/:id/:index", uploadBlock)
|
fileGroup.Post("/upload/block/:id/:index", uploadBlock)
|
||||||
fileGroup.Post("/upload/finish/:id", finishUpload)
|
fileGroup.Post("/upload/finish/:id", finishUpload)
|
||||||
|
fileGroup.Post("/upload/cancel/:id", cancelUpload)
|
||||||
fileGroup.Post("/redirect", createRedirectFile)
|
fileGroup.Post("/redirect", createRedirectFile)
|
||||||
fileGroup.Get("/:id", getFile)
|
fileGroup.Get("/:id", getFile)
|
||||||
fileGroup.Put("/:id", updateFile)
|
fileGroup.Put("/:id", updateFile)
|
||||||
@@ -92,7 +93,24 @@ func finishUpload(c fiber.Ctx) error {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// createRedirectFile 创建重定向文件
|
func cancelUpload(c fiber.Ctx) error {
|
||||||
|
uid := c.Locals("uid").(uint)
|
||||||
|
|
||||||
|
id, err := strconv.ParseUint(c.Params("id"), 10, 32)
|
||||||
|
if err != nil {
|
||||||
|
return model.NewRequestError("Invalid file ID")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := service.CancelUploadingFile(uid, uint(id)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return c.JSON(model.Response[any]{
|
||||||
|
Success: true,
|
||||||
|
Message: "Upload cancelled successfully",
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func createRedirectFile(c fiber.Ctx) error {
|
func createRedirectFile(c fiber.Ctx) error {
|
||||||
uid := c.Locals("uid").(uint)
|
uid := c.Locals("uid").(uint)
|
||||||
|
|
||||||
|
@@ -230,6 +230,34 @@ func FinishUploadingFile(uid uint, fid uint) (*model.FileView, error) {
|
|||||||
return dbFile.ToView(), nil
|
return dbFile.ToView(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func CancelUploadingFile(uid uint, fid uint) error {
|
||||||
|
uploadingFile, err := dao.GetUploadingFile(fid)
|
||||||
|
if err != nil {
|
||||||
|
log.Error("failed to get uploading file: ", err)
|
||||||
|
return model.NewNotFoundError("file not found")
|
||||||
|
}
|
||||||
|
if uploadingFile.UserID != uid {
|
||||||
|
return model.NewUnAuthorizedError("user cannot cancel uploading file")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := dao.DeleteUploadingFile(fid); err != nil {
|
||||||
|
log.Error("failed to delete uploading file: ", err)
|
||||||
|
return model.NewInternalServerError("failed to delete uploading file")
|
||||||
|
}
|
||||||
|
|
||||||
|
go func() {
|
||||||
|
// Wait for 1 second to ensure there is no block being uploading
|
||||||
|
time.Sleep(time.Second)
|
||||||
|
if err := os.RemoveAll(uploadingFile.TempPath); err != nil {
|
||||||
|
log.Error("failed to remove temp dir: ", err)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
updateUploadingSize(-uploadingFile.TotalSize)
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func CreateRedirectFile(uid uint, filename string, description string, resourceID uint, redirectUrl string) (*model.FileView, error) {
|
func CreateRedirectFile(uid uint, filename string, description string, resourceID uint, redirectUrl string) (*model.FileView, error) {
|
||||||
canUpload, err := checkUserCanUpload(uid)
|
canUpload, err := checkUserCanUpload(uid)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
Reference in New Issue
Block a user