fix: clear uploads if file doesn't exist
This commit is contained in:
parent
89f75bffa7
commit
695ac88eac
@ -14,8 +14,6 @@ export async function upload(url, content = "", overwrite = false, onupload) {
|
|||||||
|
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const metadata = {
|
const metadata = {
|
||||||
filename: content.name,
|
|
||||||
filetype: content.type,
|
|
||||||
overwrite: overwrite.toString(),
|
overwrite: overwrite.toString(),
|
||||||
// url is URI encoded and needs to be decoded for metadata first
|
// url is URI encoded and needs to be decoded for metadata first
|
||||||
destination: decodeURIComponent(removePrefix(url)),
|
destination: decodeURIComponent(removePrefix(url)),
|
||||||
|
|||||||
@ -54,9 +54,19 @@ func (store *InPlaceDataStore) UseIn(composer *tusd.StoreComposer) {
|
|||||||
composer.UseConcater(store)
|
composer.UseConcater(store)
|
||||||
}
|
}
|
||||||
|
|
||||||
func prepareFile(filePath string, uploadSize int64, mutex *sync.Mutex) (int64, error) {
|
func (store *InPlaceDataStore) prepareFile(filePath string, info *tusd.FileInfo) (int64, error) {
|
||||||
mutex.Lock()
|
store.mutex.Lock()
|
||||||
defer mutex.Unlock()
|
defer store.mutex.Unlock()
|
||||||
|
|
||||||
|
// If the file doesn't exist, remove all upload references.
|
||||||
|
// This way we can eliminate inconsistencies for failed uploads.
|
||||||
|
if _, err := os.Stat(filePath); os.IsNotExist(err) {
|
||||||
|
for id, upload := range store.uploads {
|
||||||
|
if upload.filePath == filePath {
|
||||||
|
delete(store.uploads, id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Create the file if it doesn't exist.
|
// Create the file if it doesn't exist.
|
||||||
file, err := os.OpenFile(filePath, os.O_WRONLY|os.O_CREATE, filePerm)
|
file, err := os.OpenFile(filePath, os.O_WRONLY|os.O_CREATE, filePerm)
|
||||||
@ -71,7 +81,7 @@ func prepareFile(filePath string, uploadSize int64, mutex *sync.Mutex) (int64, e
|
|||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
// Enlarge the file by the upload's size.
|
// Enlarge the file by the upload's size.
|
||||||
_, err = file.Write(make([]byte, uploadSize))
|
_, err = file.Write(make([]byte, info.Size))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
@ -97,9 +107,8 @@ func (store *InPlaceDataStore) NewUpload(ctx context.Context, info tusd.FileInfo
|
|||||||
// Tus creates a POST request for the final concatenation.
|
// Tus creates a POST request for the final concatenation.
|
||||||
// In that case, we don't need to create a new upload.
|
// In that case, we don't need to create a new upload.
|
||||||
actualOffset := info.Size
|
actualOffset := info.Size
|
||||||
if info.IsPartial {
|
if !info.IsFinal {
|
||||||
actualOffset, err = prepareFile(filePath, info.Size, store.mutex)
|
if actualOffset, err = store.prepareFile(filePath, &info); err != nil {
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user