吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3750|回复: 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] 纯文本查看 复制代码
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
<!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, 2025-5-25 06:13

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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