You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
840 B
40 lines
840 B
package core
|
|
|
|
import (
|
|
"io"
|
|
"os"
|
|
)
|
|
|
|
// FileService 提供文件传输服务
|
|
type FileService struct{}
|
|
|
|
// FileChunk 表示文件分片
|
|
type FileChunk struct {
|
|
FileName string // 文件名
|
|
Data []byte // 数据分片
|
|
Offset int64 // 偏移量,用于重组
|
|
IsLast bool // 是否为最后一个分片
|
|
}
|
|
|
|
// Upload 接收文件分片并写入到本地文件
|
|
func (f *FileService) Upload(chunk FileChunk, reply *bool) error {
|
|
// 打开或创建文件,使用追加模式
|
|
file, err := os.OpenFile(chunk.FileName, os.O_WRONLY|os.O_CREATE, 0644)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer file.Close()
|
|
|
|
// 移动到指定偏移量
|
|
if _, err := file.Seek(chunk.Offset, io.SeekStart); err != nil {
|
|
return err
|
|
}
|
|
|
|
// 写入数据
|
|
if _, err := file.Write(chunk.Data); err != nil {
|
|
return err
|
|
}
|
|
|
|
*reply = true
|
|
return nil
|
|
}
|
|
|