V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
chinacivi
V2EX  ›  分享创造

OneDrive 直链转换工具

  •  2
     
  •   chinacivi · 212 天前 · 2933 次点击
    这是一个创建于 212 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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>
    
    6 条回复    2024-03-17 01:08:22 +08:00
    aogg
        1
    aogg  
       212 天前   ❤️ 2
    写成暴力猴脚本啊
    chesha1
        2
    chesha1  
       212 天前
    好好好,太有用了
    zliea
        3
    zliea  
       212 天前
    写成暴力猴脚本+1
    chinacivi
        4
    chinacivi  
    OP
       211 天前
    @aogg 是需要转换直连,还是识别链接自动下载?
    MinonHeart
        5
    MinonHeart  
       201 天前
    https://www.hub.moe/laboratory/onedrive-direct-link.html
    分享下 Automator Application(macOS) 脚本
    Leao9203
        6
    Leao9203  
       41 天前
    有用,200G+的分包终于有办法断点续传了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2921 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 09:22 · PVG 17:22 · LAX 02:22 · JFK 05:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.