MCPcopy Create free account
hub / github.com/53AI/53AIHub / createUploadFileRecordFromTask

Method createUploadFileRecordFromTask

api/service/file_processor.go:613–692  ·  view source on GitHub ↗

createUploadFileRecordFromTask 从任务创建上传文件记录(流式处理版本)

(task *UploadTask)

Source from the content-addressed store, hash-verified

611
612// createUploadFileRecordFromTask 从任务创建上传文件记录(流式处理版本)
613func (fp *FileProcessor) createUploadFileRecordFromTask(task *UploadTask) (*model.UploadFile, error) {
614 // 打开文件
615 file, err := task.FileHeader.Open()
616 if err != nil {
617 return nil, fmt.Errorf("打开文件失败: %v", err)
618 }
619 defer file.Close()
620
621 // 创建临时文件用于流式处理
622 tempFile, err := os.CreateTemp("", fmt.Sprintf("upload_%s_*.tmp", task.FileID))
623 if err != nil {
624 return nil, fmt.Errorf("创建临时文件失败: %v", err)
625 }
626 defer func() {
627 tempFile.Close()
628 os.Remove(tempFile.Name())
629 }()
630
631 // 流式复制文件内容到临时文件,避免大文件占用内存
632 _, err = io.Copy(tempFile, file)
633 if err != nil {
634 return nil, fmt.Errorf("复制文件内容失败: %v", err)
635 }
636
637 // 重置临时文件指针到开头
638 if _, err := tempFile.Seek(0, 0); err != nil {
639 return nil, fmt.Errorf("重置临时文件指针失败: %v", err)
640 }
641
642 // 计算文件哈希
643 hashStr, err := storage.GetFileHash(tempFile)
644 if err != nil {
645 return nil, fmt.Errorf("计算文件哈希失败: %v", err)
646 }
647
648 // 重置临时文件指针到开头准备读取内容
649 if _, err := tempFile.Seek(0, 0); err != nil {
650 return nil, fmt.Errorf("重置临时文件指针失败: %v", err)
651 }
652
653 // 读取临时文件内容用于存储
654 fileContent, err := io.ReadAll(tempFile)
655 if err != nil {
656 return nil, fmt.Errorf("读取临时文件内容失败: %v", err)
657 }
658
659 extension := filepath.Ext(task.FileHeader.Filename)
660 previewKey, err := model.GetPreviewKey(hashStr, extension, task.EID)
661 if err != nil {
662 return nil, fmt.Errorf("生成预览键失败: %v", err)
663 }
664
665 key := model.GetFileKey(previewKey, task.EID, task.UserID)
666
667 // 存储文件
668 err = storage.StorageInstance.Save(fileContent, key)
669 if err != nil {
670 return nil, fmt.Errorf("存储文件失败: %v", err)

Callers 1

Calls 5

SaveMethod · 0.95
ErrorfMethod · 0.80
SaveMethod · 0.65
GetMethod · 0.65
CloseMethod · 0.45

Tested by

no test coverage detected