Repository: AlistGo/alist (language: go)

Issue:
[driver/onedrive] 覆盖上传大文件时会失败
### Please make sure of the following things

- [X] I have read the [documentation](https://alist.nn.ci).
我已经阅读了[文档](https://alist.nn.ci)。

- [X] I'm sure there are no duplicate issues or discussions.
我确定没有重复的issue或讨论。

- [X] I'm sure it's due to `AList` and not something else(such as [Network](https://alist.nn.ci/faq/howto.html#tls-handshake-timeout-read-connection-reset-by-peer-dns-lookup-failed-connect-connection-refused-client-timeout-exceeded-while-awaiting-headers-no-such-host) ,`Dependencies` or `Operational`).
我确定是`AList`的问题，而不是其他原因（例如[网络](https://alist.nn.ci/zh/faq/howto.html#tls-handshake-timeout-read-connection-reset-by-peer-dns-lookup-failed-connect-connection-refused-client-timeout-exceeded-while-awaiting-headers-no-such-host)，`依赖`或`操作`）。

- [X] I'm sure this issue is not fixed in the latest version.
我确定这个问题在最新版本中没有被修复。


### AList Version / AList 版本

v3.27.0

### Driver used / 使用的存储驱动

onedriveAPP

### Describe the bug / 问题描述

当用户尝试在 OneDrive 上分段上传一个已经存在的文件时，上传成功的响应状态码为 `200 OK` 而非 `201 Created`（[参见官方文档](https://learn.microsoft.com/zh-cn/onedrive/developer/rest-api/api/driveitem_createuploadsession?view=odsp-graph-online#completing-a-file)）。

然而，在 AList 的 OneDrive 驱动中（以 onedriveApp）为例，将 `201 Created` 和 `202 Accepted` 之外的状态码[均认为是失败的结果](https://github.com/alist-org/alist/blob/main/drivers/onedrive_app/util.go#L190)。我认为这导致了在覆盖大文件时会失败。

### Reproduction / 复现链接

无

### Config / 配置

无需提供。

### Logs / 日志

```
ERRO[2023-09-13 23:17:05]/app/server/webdav.go:27 github.com/alist-org/alist/v3/server.WebDav.func1() PUT /dav/1drv/******* {"@odata.context":"___REDACTED___","@content.downloadUrl":"___REDACTED___","createdBy":{"application":{"id":"4*****2","displayName":"Alist"},"user":{"displayName":"SharePoint App"}},"createdDateTime":"2023-09-13T12:02:32Z","eTag":"___REDACTED___","id":"___REDACTED___","lastModifiedBy":{"application":{"id":"4*****2","displayName":"Alist"},"user":{"displayName":"SharePoint App"}},"lastModifiedDateTime":"___REDACTED___","name":"*****","parentReference":{"driveType":"business","driveId":"___REDACTED___","path":"___REDACTED___","siteId":"___REDACTED___"},"webUrl":"___REDACTED___","cTag":"___REDACTED___","file":{"hashes":{"quickXorHash":"___REDACTED___"},"irmEffectivelyEnabled":false,"irmEnabled":false,"mimeType":"application/octet-stream"},"fileSystemInfo":{"createdDateTime":"___REDACTED___","lastModifiedDateTime":"___REDACTED___"},"size":114514}
```


Discussion / hints:
Thanks for opening your first issue here! Be sure to follow the issue template!


Fix patch:
diff --git a/drivers/onedrive/util.go b/drivers/onedrive/util.go
index b17a0361a6a..0539e098682 100644
--- a/drivers/onedrive/util.go
+++ b/drivers/onedrive/util.go
@@ -196,7 +196,8 @@ func (d *Onedrive) upBig(ctx context.Context, dstDir model.Obj, stream model.Fil
 		if err != nil {
 			return err
 		}
-		if res.StatusCode != 201 && res.StatusCode != 202 {
+		// https://learn.microsoft.com/zh-cn/onedrive/developer/rest-api/api/driveitem_createuploadsession
+		if res.StatusCode != 201 && res.StatusCode != 202 && res.StatusCode != 200 {
 			data, _ := io.ReadAll(res.Body)
 			res.Body.Close()
 			return errors.New(string(data))
diff --git a/drivers/onedrive_app/util.go b/drivers/onedrive_app/util.go
index 51160e1ae6a..a40424bd5da 100644
--- a/drivers/onedrive_app/util.go
+++ b/drivers/onedrive_app/util.go
@@ -187,7 +187,8 @@ func (d *OnedriveAPP) upBig(ctx context.Context, dstDir model.Obj, stream model.
 		if err != nil {
 			return err
 		}
-		if res.StatusCode != 201 && res.StatusCode != 202 {
+		// https://learn.microsoft.com/zh-cn/onedrive/developer/rest-api/api/driveitem_createuploadsession
+		if res.StatusCode != 201 && res.StatusCode != 202 && res.StatusCode != 200 {
 			data, _ := io.ReadAll(res.Body)
 			res.Body.Close()
 			return errors.New(string(data))


Test patch: