OneDrive 直链转换工具

2023-09-28 12:48:41 +08:00
 chinacivi

OneDrive 是微软提供的云存储服务,它可以方便地存储和分享文件。然而,OneDrive 的文件分享链接默认是经过处理的,无法直接通过浏览器下载文件。写了一个单独的 HTML 文件,可以将 OneDrive 的文件分享链接转换为直接下载链接,实现文件的直接下载功能。而且,这个功能可以在本地双击直接运行,也可以通过将文件放到服务器上并通过域名访问。

实现原理

该功能的实现原理非常简单,通过 JavaScript 代码解析用户输入的 OneDrive 文件分享链接,提取关键信息,并根据提取的信息构造出直接下载链接。然后,将转换后的链接展示给用户,并提供复制功能,方便用户进行操作。

使用方法

在本地使用

  1. 将 HTML 代码保存为一个名为onedrive.html的文件。
  2. 双击onedrive.html文件,它会在您默认的浏览器中打开。
  3. 在输入框中输入 OneDrive 文件的分享链接,然后点击”转换并复制链接”按钮。
  4. 转换后的直接下载链接将会在页面上显示出来。您可以点击链接进行下载,或者点击旁边的”复制”按钮将链接复制到剪贴板中。

通过服务器访问

  1. 将 HTML 代码保存为一个名为onedrive.html的文件。
  2. onedrive.html文件上传到您的服务器上,确保可以通过域名访问到该文件。
  3. 在浏览器中输入http://yourdomain.com/onedrive.html,将会打开转换工具页面。
  4. 输入 OneDrive 文件的分享链接,点击”转换并复制链接”按钮,即可获取直接下载链接。

使用以上方法,您可以在本地或通过服务器访问转换工具页面,方便地将 OneDrive 文件分享链接转换为直接下载链接。

希望这个简单的 OneDrive 转直连工具能够帮助您更方便地下载 OneDrive 中的文件!

演示地址:

OneDrive 直链转换工具 (onw.cc)


<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>OneDrive 直链转换工具</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            margin: 0;
            padding: 0;
        }

        h1 {
            color: #333;
        }

        form {
            margin-bottom: 20px;
        }

        label {
            font-weight: bold;
        }

        input[type="text"],
        textarea {
            width: 100%;
            padding: 5px;
            margin-bottom: 10px;
            box-sizing: border-box;
        }

        input[type="button"],
        .copy-button,
        #copy-all-button {
            padding: 10px 20px;
            background-color: #4CAF50;
            color: #fff;
            border: none;
            cursor: pointer;
        }

        .result {
            margin-top: 20px;
            border: 1px solid #ccc;
            padding: 10px;
            background-color: #f9f9f9;
        }

        .error {
            color: #f00;
        }
    </style>
</head>

<body>
    <h1>OneDrive 直链转换工具</h1>
    <form>
        <label for="urls">请输入 OneDrive 单文件分享链接(每行一个):</label><br>
      
    <textarea id="urls" rows="5" cols="50" required></textarea><br>
        <input type="button" value="转换" onclick="convertAndCopy()">
    </form>
    <script>
  // 在页面加载时设置输入框的提示文本
  window.onload = function () {
    var textarea = document.getElementById("urls");
    textarea.placeholder = "支持格式:\n 个人版 onedrive: https://1drv.ms/i/s!AnDZHOpvo15********5Wo\n 企业版 onedrive: https://jkwl-my.sharepoint.com/:i:/g/personal/admin_***_com/EcqpkSG0KsFFgQ******KhgBICI_se3pMm***MPQ-0Q?e=kxarnf";
  };

  // 其他代码...
</script>
    <div id="results"></div>
    <button id="copy-all-button" onclick="copyAllLinks()">复制全部</button>

    <script>
        function copyText(elementId) {
            var element = document.getElementById(elementId);
            var range = document.createRange();
            range.selectNode(element);
            window.getSelection().removeAllRanges();
            window.getSelection().addRange(range);
            document.execCommand("copy");
            window.getSelection().removeAllRanges();
        }

        function copyAllLinks() {
            var allLinks = document.querySelectorAll('.result span');
            var allLinksText = [];

            allLinks.forEach(function (link) {
                allLinksText.push(link.textContent);
            });

            var allLinksTextString = allLinksText.join('\n');

            var tempTextarea = document.createElement('textarea');
            tempTextarea.value = allLinksTextString;
            document.body.appendChild(tempTextarea);
            tempTextarea.select();
            document.execCommand('copy');
            document.body.removeChild(tempTextarea);

            alert('已复制全部链接到剪贴板!');
        }

        function convertAndCopy() {
            var inputUrls = document.getElementById("urls").value;
            var urlList = inputUrls.split("\n");
            var resultDiv = document.getElementById("results");
            resultDiv.innerHTML = "";

            var convertedLinks = []; // 用于存储转换后的链接

            urlList.forEach(function (url, index) {
                url = url.trim();
if (url !== "") {
    try {
        var convertedLink = judgeLink(url);
        var resultElement = document.createElement("div");
        resultElement.className = "result";
        resultElement.innerHTML = '<p><strong>原始链接:</strong><br>' + url + '</p>' +
            '<p><strong>转换后链接:</strong><br><span id="result-link-' + index + '">' + convertedLink +
            '</span> <button class="copy-button" onclick="copyText(\'result-link-' + index + '\')">复制</button></p>';
        resultDiv.appendChild(resultElement);

        convertedLinks.push(convertedLink); // 添加到转换后的链接数组
    } catch (e) {
        var errorElement = document.createElement("p");
        errorElement.className = "error";
        errorElement.textContent = "请检查链接是否正确?";
        resultDiv.appendChild(errorElement);
    }
}

            });

            // 自动复制转换后的链接
            if (convertedLinks.length > 0) {
                var convertedLinksText = convertedLinks.join('\n');

                var tempTextarea = document.createElement('textarea');
                tempTextarea.value = convertedLinksText;
                document.body.appendChild(tempTextarea);
                tempTextarea.select();
                document.execCommand('copy');
                document.body.removeChild(tempTextarea);

                alert('已自动复制全部转换后链接到剪贴板!');
            }
        }

function judgeLink(url) {
    if (url.startsWith("https://1drv.ms/")) {
        // 如果是 https://1drv.ms/ 链接,则加上 https://onw.cc/1drv.ms.php?url=
        return "https://onw.cc/1drv.ms.php?url=" + url;
    }

    var reg1 = /https:\/\/.+sharepoint\.com/;
    var reg2 = /personal\/(\w+?)\//;
    var reg3 = /.*\/(\S+)/;
    var reg4 = /com\/:(\w):/;

    var matches1 = url.match(reg1);
    var matches2 = url.match(reg2);
    var matches3 = url.match(reg3);

    var p1 = matches1[0];
    var p2 = matches2[1];
    var p3 = matches3[1];

    if (p3.includes('?')) {
        p3 = p3.split('?')[0];
    }

    var matches4 = url.match(reg4);
    if (matches4[1] === 'f') {
        return "抱歉,你所输入链接分享的是文件夹,直链生成仅对单文件有效。";
    }

    return p1 + '/personal/' + p2 + '/_layouts/52/download.aspx?share=' + p3;
}

    </script>
</body>

</html>
4037 次点击
所在节点    分享创造
6 条回复
aogg
2023-09-28 14:08:49 +08:00
写成暴力猴脚本啊
chesha1
2023-09-28 15:39:04 +08:00
好好好,太有用了
zliea
2023-09-28 16:57:58 +08:00
写成暴力猴脚本+1
chinacivi
2023-09-28 18:05:48 +08:00
@aogg 是需要转换直连,还是识别链接自动下载?
MinonHeart
2023-10-09 12:52:28 +08:00
https://www.hub.moe/laboratory/onedrive-direct-link.html
分享下 Automator Application(macOS) 脚本
Leao9203
243 天前
有用,200G+的分包终于有办法断点续传了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/977889

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX