siyuan-note/siyuan · error

Upload failed

Error message

Upload failed: %s

What it means

The cloud upload request completed (2xx) but the business response carried a non-zero code; the server's message is embedded via the localized 'Upload failed: %s' (Conf.Language(94)). This is distinct from ErrFailedToConnectCloudServer (network) and the 401 auth case: the server received and actively rejected the upload.

Solutions

  1. Read the embedded server message to identify the concrete rejection reason
  2. Free up cloud storage (delete old cloud backups) or increase the quota, then retry
  3. Confirm each asset is under the local size limit that gates uploads before batching
  4. If the message indicates a transient server issue, retry later
Defensive patterns

Strategy: try-catch

Try / catch

Wrap UploadAssets2Cloud in error handling that distinguishes the three failure modes - ErrFailedToConnectCloudServer (network), the re-login message (auth, abort), and this wrapped rejection - and surface the embedded server message verbatim; allow retry only for quota/transient causes.

Prevention

When it happens

Trigger: Cloud storage quota exceeded; the file violates server-side limits (type or remaining size); the server returns a business error during maintenance or request validation.

Common situations: Free-tier cloud storage full; assets near the size limit; account state changes mid-batch.

Related errors


AI-assisted analysis of siyuan-note/siyuan@afa823b6b4 (2026-08-18). Data as JSON: /api/errors/30d37f8e2ff70e8a. Report an issue: GitHub.

Appendix: source

Thrown at kernel/model/assets.go:1384

			SetSuccessResult(requestResult).
			SetFile("file[]", absAsset).
			SetCookies(&http.Cookie{Name: "symphony", Value: uploadToken}).
			SetHeader("meta-type", metaType).
			SetHeader("biz-type", bizType).
			Post(util.GetCloudServer() + "/apis/siyuan/upload?ver=" + util.Ver)
		if nil != reqErr {
			logging.LogErrorf("upload assets failed: %s", reqErr)
			return count, ErrFailedToConnectCloudServer
		}

		if 401 == resp.StatusCode {
			err = errors.New(Conf.Language(31))
			return
		}

		if 0 != requestResult.Code {
			logging.LogErrorf("upload assets failed: %s", requestResult.Msg)
			err = fmt.Errorf(Conf.Language(94), requestResult.Msg)
			return
		}

		absAsset = filepath.ToSlash(absAsset)
		relAsset := absAsset[strings.Index(absAsset, "assets/"):]
		completedUploadAssets = append(completedUploadAssets, relAsset)
		logging.LogInfof("uploaded asset [%s]", relAsset)
		count++
	}

	if !ignorePushMsg {
		util.PushClearMsg(msgId)
	}

	if 0 < len(completedUploadAssets) {
		logging.LogInfof("uploaded [%d] assets", len(completedUploadAssets))
	}
	return

View on GitHub (pinned to afa823b6b4)