MCPcopy Create free account
hub / github.com/ScattrdBlade/bigFileUpload / uploadToWebdav

Function uploadToWebdav

utils/upload.ts:1084–1140  ·  view source on GitHub ↗
(fileBlob: Blob, filename: string)

Source from the content-addressed store, hash-verified

1082}
1083
1084async function uploadToWebdav(fileBlob: Blob, filename: string): Promise<string> {
1085 const { webdavUrl, webdavServerType, webdavDirectory } = settings.store as {
1086 webdavUrl?: string;
1087 webdavServerType?: string;
1088 webdavDirectory?: string;
1089 };
1090
1091 if (!webdavUrl) {
1092 throw new Error("WebDAV server URL is required");
1093 }
1094
1095 const authHeader = buildWebdavAuthHeader();
1096 const baseUrl = webdavUrl.replace(/\/+$/, "");
1097 const dir = (webdavDirectory || "").replace(/^\/+|\/+$/g, "");
1098 const relativePath = dir ? `${dir}/${filename}` : filename;
1099 const encodedDir = dir ? dir.split("/").map(encodeURIComponent).join("/") + "/" : "";
1100 const uploadUrl = `${baseUrl}/${encodedDir}${encodeURIComponent(filename)}`;
1101 const serverType = webdavServerType || "nextcloud";
1102
1103 const requestHeaders: Record<string, string> = {
1104 "Content-Type": fileBlob.type || "application/octet-stream"
1105 };
1106 if (authHeader) {
1107 requestHeaders.Authorization = authHeader;
1108 }
1109
1110 if (Native) {
1111 const arrayBuffer = await fileBlob.arrayBuffer();
1112 const result = await Native.uploadToWebdav(arrayBuffer, uploadUrl, requestHeaders);
1113 if (!result.success) {
1114 throw new Error(result.error || "Upload failed");
1115 }
1116 } else {
1117 const response = await uploadRequestWithTimeout(uploadUrl, {
1118 method: "PUT",
1119 headers: requestHeaders,
1120 body: fileBlob
1121 });
1122
1123 if (!response.ok) {
1124 const errorText = await response.text();
1125 throw new Error(`Upload failed: ${response.status} ${errorText}`);
1126 }
1127 }
1128
1129 if (serverType === "generic") {
1130 return uploadUrl;
1131 }
1132
1133 let serverOrigin: string;
1134 try {
1135 serverOrigin = new URL(webdavUrl).origin;
1136 } catch {
1137 throw new Error("Invalid WebDAV server URL");
1138 }
1139 return await createWebdavShare(relativePath, serverOrigin, filename);
1140}
1141

Callers 1

uploadToServiceFunction · 0.70

Calls 4

buildWebdavAuthHeaderFunction · 0.85
uploadRequestWithTimeoutFunction · 0.85
textMethod · 0.80
createWebdavShareFunction · 0.70

Tested by

no test coverage detected