吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3219|回复: 14
收起左侧

[其他原创] html单文件实现 OneDrive 直链转换

[复制链接]
bhsmr 发表于 2023-9-27 17:17
本帖最后由 bhsmr 于 2023-10-14 05:42 编辑

OneDrive是微软提供的云存储服务,它可以方便地存储和分享文件。然而,OneDrive的文件分享链接默认是经过处理的,无法直接通过浏览器下载文件。写了一个单独的HTML文件,可以将OneDrive的文件分享链接转换为直接下载链接,实现文件的直接下载功能。而且,这个功能可以在本地双击直接运行,也可以通过将文件放到服务器上并通过域名访问。实现原理该功能的实现原理非常简单,通过JavaScript代码解析用户输入的OneDrive文件分享链接,提取关键信息,并根据提取的信息构造出直接下载链接。然后,将转换后的链接展示给用户,并提供复制功能,方便用户进行操作。
使用方法
本地使用
  • 将HTML代码保存为一个名为onedrive.html的文件。
  • 双击onedrive.html文件,它会在您默认的浏览器中打开。
  • 在输入框中输入OneDrive文件的分享链接,然后点击”转换并复制链接”按钮。
  • 转换后的直接下载链接将会在页面上显示出来。您可以点击链接进行下载,或者点击旁边的”复制”按钮将链接复制到剪贴板中。
通过服务器访问
  • 将HTML代码保存为一个名为onedrive.html的文件。
  • 将onedrive.html文件上传到您的服务器上,确保可以通过域名访问到该文件。
  • 在浏览器中输入http://域名/onedrive.html,将会打开转换工具页面。
  • 输入OneDrive文件的分享链接,点击”转换并复制链接”按钮,即可获取直接下载链接。

使用以上方法,您可以在本地或通过服务器访问转换工具页面,方便地将OneDrive文件分享链接转换为直接下载链接。希望这个简单的OneDrive转直连工具能够帮助您更方便地下载OneDrive中的文件!


演示地址:https://onw.cc/onedrive.html

a_2023092610471551.jpg


[HTML] 纯文本查看 复制代码
<!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="转换">
    </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">复制全部</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">复制</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?url=
        return "https://onw.cc/1drv.ms?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>

免费评分

参与人数 2吾爱币 +8 热心值 +2 收起 理由
HANJIYU + 1 + 1 谢谢@Thanks!
wushaominkk + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| bhsmr 发表于 2023-10-14 05:40
hrh123 发表于 2023-9-27 22:23
onedrive的分享地址不应该是1drv.ms开头的吗?
sharepoint和onedrive好像不是一个东西吧,虽然都是微软的,但 ...

演示地址:https://onw.cc/onedrive.html  已支持个人版分享链接。 可以直接查看源码保存本地。
 楼主| bhsmr 发表于 2023-9-28 00:12
本帖最后由 bhsmr 于 2023-9-28 00:13 编辑
hrh123 发表于 2023-9-27 23:37
是的,这2个应该是有一定区别的,尤其是在链接上

刚才看了下,访问 个人版,
格式:https://1drv.ms/u/s****************  访问跳转 https://onedrive.live.com/?authkey=********id=*********&parId=*******
浏览器会有一个 POST api请求,直连地址就在API里面。只凭html 肯定是无法实现了

1695831107264.png


1695831064406.png
 楼主| bhsmr 发表于 2023-10-17 15:24
aichiyu 发表于 2023-10-15 16:51
个人版得直连不建议使用。因为可以查看你所有分享,因为是通过分享转换得直连

个人解析是通过一个单文文件curl来获取直连,不会记录分享地址。
个人版只能通过服务器curl方式来获取直连,也考虑过访问者自己网络来获取直连,但是存在跨域问题,无法本地实现。
hrh123 发表于 2023-9-27 22:23
本帖最后由 hrh123 于 2023-9-27 22:27 编辑

onedrive的分享地址不应该是1drv.ms开头的吗?
sharepoint和onedrive好像不是一个东西吧,虽然都是微软的,但不知道这个程序是否都适用?
 楼主| bhsmr 发表于 2023-9-27 23:30
hrh123 发表于 2023-9-27 22:23
onedrive的分享地址不应该是1drv.ms开头的吗?
sharepoint和onedrive好像不是一个东西吧,虽然都是微软的,但 ...

我用的 office E3。 1drv.ms 是个人版onedrive分享链接吗?
hrh123 发表于 2023-9-27 23:37
bhsmr 发表于 2023-9-27 23:30
我用的 office E3。 1drv.ms 是个人版onedrive分享链接吗?

是的,这2个应该是有一定区别的,尤其是在链接上
 楼主| bhsmr 发表于 2023-9-27 23:51
hrh123 发表于 2023-9-27 23:37
是的,这2个应该是有一定区别的,尤其是在链接上

我没用个人OneDrive,不清楚他的转换。个人 好像默认只有5g吧。  一会我研究下 个人版的直连
aichiyu 发表于 2023-10-15 16:51
个人版得直连不建议使用。因为可以查看你所有分享,因为是通过分享转换得直连
haibaobao 发表于 2023-12-15 16:10
感谢作者提供的代码,可在我这打开时会乱码
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-28 10:20

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表