|
|
AIWROKÈí¼þ½Å±¾GETÏÂÔØÎļþ²¢¼ì²â0KB¹¤¾ß
- // ============================================================================
- // GETÏÂÔØÎļþ²¢¼ì²â0KB¹¤¾ß
- // AIWROK¹Ù·½Èº: 711841924£¬Æ»¹ûȺ£¬528816639
- // ============================================================================
- // ¹¦ÄÜ˵Ã÷£º
- // 1. downloadFile() - GETÇëÇóÏÂÔØÍ¼Æ¬Îļþ£¬×Ô¶¯¼ì²âContent-TypeºÍ0KB¿ÕÎļþ
- // 2. uploadFile() - POST multipart/form-data·½Ê½ÉÏ´«Îļþµ½·þÎñÆ÷
- // 3. downloadWithResume() - Ö§³Ö¶ÏµãÐø´«µÄÏÂÔØ¹¦ÄÜ£¬¿É´ÓÖжϴ¦¼ÌÐøÏÂÔØ
- // 4. batchDownload() - ÅúÁ¿ÏÂÔØ¹ÜÀíÆ÷£¬Í³¼Æ³É¹¦/ʧ°ÜÊýÁ¿ºÍ×ÜÎļþ´óС
- //
- // ʹÓó¡¾°£º
- // - ͼƬ×ÊÔ´ÅúÁ¿ÏÂÔØºÍÑéÖ¤
- // - ´óÎļþ¶ÏµãÐø´«ÏÂÔØ
- // - ÎļþÉÏ´«µ½Ô¶³Ì·þÎñÆ÷
- // - ×Ô¶¯»¯²âÊÔÖеÄÎļþ²Ù×÷ÑéÖ¤
- // ============================================================================
- /**
- * ¼ì²âÊÇ·ñΪÓÐЧµÄͼƬContent-Type
- * @param {String} contentType - HTTPÏìÓ¦µÄContent-TypeÍ·²¿Öµ
- * @returns {Boolean} ÊÇ·ñΪÓÐЧµÄͼƬÀàÐÍ(png/jpeg/jpg/gif/webp)
- */
- function isValidImageContentType(contentType) {
- if (!contentType) return false;
- contentType = contentType.toLowerCase();
- return contentType.indexOf("image/png") !== -1 ||
- contentType.indexOf("image/jpeg") !== -1 ||
- contentType.indexOf("image/jpg") !== -1 ||
- contentType.indexOf("image/gif") !== -1 ||
- contentType.indexOf("image/webp") !== -1;
- }
- /**
- * GETÇëÇóÏÂÔØÎļþ²¢¼ì²â0KBºÍÊÇ·ñΪÓÐЧͼƬ
- *
- * ¹¤×÷Á÷³Ì£º
- * 1. ·¢ÆðGETÇëÇó»ñÈ¡ÎļþÄÚÈÝ
- * 2. ¼ì²éContent-TypeÊÇ·ñΪÓÐЧͼƬ¸ñʽ
- * 3. ½«ÏìÓ¦Êý¾ÝдÈë±¾µØÎļþ
- * 4. ÑéÖ¤Îļþ´óС£¬¾Ü¾ø0KB¿ÕÎļþ
- *
- * @param {String} url - ÏÂÔØµØÖ·£¨±ØÐëÊÇÓÐЧµÄͼƬURL£©
- * @param {String} savePath - ±¾µØ±£´æÂ·¾¶£¨Èç/sdcard/Download/test.png£©
- * @returns {Boolean} ÊÇ·ñ³É¹¦ÏÂÔØÇÒÎļþÓÐЧ£¨true=³É¹¦£¬false=ʧ°Ü£©
- *
- * ʾÀý£º
- * var result = downloadFile("https://example.com/image.png", "/sdcard/test.png");
- * if (result) {
- * printl("ÏÂÔØ³É¹¦£¡");
- * }
- */
- function downloadFile(url, savePath) {
- var http = new okHttp();
- var response = http.get(url);
-
- var contentType = http.getResponseHeaders();
- printl("Content-Type: " + contentType);
-
- if (!isValidImageContentType(contentType)) {
- printl("⚠️ ²»ÊÇÓÐЧµÄͼƬÀàÐÍ: " + contentType);
- return false;
- }
-
- var file = new java.io.File(savePath);
- var fos = new java.io.FileOutputStream(file);
- fos.write(response.getBytes());
- fos.close();
-
- var fileSize = file.length();
- printl("Îļþ´óС: " + fileSize + " ×Ö½Ú");
-
- if (fileSize === 0) {
- printl("⚠️ 0KBÎļþ: " + savePath);
- return false;
- }
-
- printl("✅ ÎļþÓÐЧ: " + (fileSize / 1024).toFixed(2) + " KB");
- return true;
- }
- // µ¥¶À²âÊÔ0KB¼ì²â - ´´½¨Ò»¸ö0KBµÄ¿ÕÎļþ
- printl("=== ²âÊÔ0KB¼ì²â ===");
- var emptyFile = new java.io.File("/sdcard/Download/test_0kb.png");
- var fos = new java.io.FileOutputStream(emptyFile);
- fos.write(new java.lang.String("").getBytes());
- fos.close();
- printl("´´½¨ÁË0KB¿ÕÎļþ: " + emptyFile.getPath());
- printl("¿ÕÎļþ´óС: " + emptyFile.length() + " ×Ö½Ú");
- if (emptyFile.length() === 0) {
- printl("✅ 0KB¼ì²âÕý³££¡ÎļþȷʵÊÇ0×Ö½Ú");
- } else {
- printl("❌ 0KB¼ì²âÒì³££¡Îļþ²»ÊÇ0×Ö½Ú");
- }
- printl("");
- // ʹÓÃʾÀý - ²âÊÔ²»´æÔÚµÄÁ´½Ó
- var url1 = "https://www.baidu.com/img/PCfb_5bf088c07f842ccde3f97245555553ea.png";
- var savePath1 = "/sdcard/Download/test_not_exist.png";
- printl("=== ²âÊÔ²»´æÔÚµÄÁ´½Ó ===");
- printl("URL: " + url1);
- var result1 = downloadFile(url1, savePath1);
- printl("½á¹û: " + (result1 ? "³É¹¦" : "ʧ°Ü"));
- printl("");
- // ʹÓÃʾÀý - ²âÊÔ´æÔÚµÄÁ´½Ó
- var url2 = "https://www.baidu.com/img/PCfb_5bf082d29588c07f842ccde3f97243ea.png";
- var savePath2 = "/sdcard/Download/test_exist.png";
- printl("=== ²âÊÔ´æÔÚµÄÁ´½Ó ===");
- printl("URL: " + url2);
- var result2 = downloadFile(url2, savePath2);
- printl("½á¹û: " + (result2 ? "³É¹¦" : "ʧ°Ü"));
- /**
- * POSTÇëÇóÉÏ´«Îļþ²¢ÑéÖ¤ÏìÓ¦
- *
- * ¹¤×÷Á÷³Ì£º
- * 1. ¼ì²é±¾µØÎļþÊÇ·ñ´æÔÚ
- * 2. ¹¹½¨multipart/form-data¸ñʽµÄHTTPÇëÇóÌå
- * 3. ¶ÁÈ¡ÎļþÄÚÈݲ¢¸½¼Óµ½ÇëÇóÖÐ
- * 4. ·¢ËÍPOSTÇëÇóµ½·þÎñÆ÷
- * 5. ¸ù¾ÝHTTP״̬ÂëÅжÏÉÏ´«ÊÇ·ñ³É¹¦£¨2xxΪ³É¹¦£©
- *
- * @param {String} uploadUrl - ÉÏ´«½Ó¿ÚµØÖ·£¨Èçhttp://example.com/upload£©
- * @param {String} filePath - ÒªÉÏ´«µÄ±¾µØÎļþÍêÕû·¾¶
- * @param {String} fieldName - ±íµ¥×Ö¶ÎÃû³Æ£¨·þÎñ¶Ë½ÓÊÕÎļþµÄ×Ö¶ÎÃû£©
- * @returns {Boolean} ÊÇ·ñ³É¹¦ÉÏ´«£¨true=³É¹¦£¬false=ʧ°Ü£©
- *
- * ʾÀý£º
- * var success = uploadFile(
- * "http://api.example.com/upload",
- * "/sdcard/photo.jpg",
- * "file"
- * );
- */
- function uploadFile(uploadUrl, filePath, fieldName) {
- var http = new okHttp();
- var file = new java.io.File(filePath);
-
- if (!file.exists()) {
- printl("❌ Îļþ²»´æÔÚ: " + filePath);
- return false;
- }
-
- var fileSize = file.length();
- printl("Îļþ´óС: " + (fileSize / 1024).toFixed(2) + " KB");
-
- // ¹¹½¨multipartÇëÇó
- var boundary = "----WebKitFormBoundary7MA4YWxkTrZu0gW";
- var requestBody = "--" + boundary + "\r\n" +
- "Content-Disposition: form-data; name=\"" + fieldName + "\"; filename=\"" + file.getName() + "\"\r\n" +
- "Content-Type: application/octet-stream\r\n\r\n";
-
- // ¶ÁÈ¡ÎļþÄÚÈÝ
- var fis = new java.io.FileInputStream(file);
- var buffer = new byte[1024];
- var bytesRead;
- while ((bytesRead = fis.read(buffer)) !== -1) {
- requestBody += new java.lang.String(buffer, 0, bytesRead);
- }
- fis.close();
-
- requestBody += "\r\n--" + boundary + "--\r\n";
-
- // ÉèÖÃÇëÇóÍ·
- http.setHeader("Content-Type", "multipart/form-data; boundary=" + boundary);
-
- var response = http.post(uploadUrl, requestBody);
- var statusCode = http.getStatusCode();
-
- printl("HTTP״̬Âë: " + statusCode);
- printl("ÏìÓ¦ÄÚÈÝ: " + response.substring(0, Math.min(response.length(), 200)));
-
- return statusCode >= 200 && statusCode < 300;
- }
- /**
- * ¶ÏµãÐø´«ÏÂÔØ¹¦ÄÜ
- *
- * ¹¤×÷Á÷³Ì£º
- * 1. ¼ì²éÄ¿±êÎļþÊÇ·ñÒÑ´æÔÚ£¨Ö®Ç°ÏÂÔØµÄ²¿·Ö£©
- * 2. Èç¹û´æÔÚ£¬»ñÈ¡ÒÑÏÂÔØµÄ´óС²¢ÉèÖÃRangeÇëÇóÍ·
- * 3. ·¢Æð´øRangeÍ·µÄGETÇëÇó£¨HTTP 206 Partial Content£©
- * 4. ÒÔ×·¼ÓģʽдÈëÎļþ£¨±£ÁôÒÑÓÐÄÚÈÝ£©
- * 5. ÑéÖ¤×îÖÕÎļþ´óС
- *
- * ÓÅÊÆ£º
- * - ÍøÂçÖжϺó¿É´Ó¶Ïµã¼ÌÐø£¬ÎÞÐèÖØÐÂÏÂÔØ
- * - ½ÚÊ¡Á÷Á¿ºÍʱ¼ä£¬ÌرðÊʺϴóÎļþ
- * - ×Ô¶¯¼ì²âºÍ´¦Àí²¿·ÖÏÂÔØµÄÎļþ
- *
- * @param {String} url - ÏÂÔØµØÖ·£¨·þÎñÆ÷ÐèÖ§³ÖRangeÇëÇó£©
- * @param {String} savePath - ±¾µØ±£´æÂ·¾¶
- * @returns {Boolean} ÊÇ·ñ³É¹¦ÏÂÔØ£¨true=³É¹¦£¬false=ʧ°Ü£©
- *
- * ʾÀý£º
- * // µÚÒ»´ÎÏÂÔØÖжϺó£¬Ôٴε÷Óûá¼ÌÐøÏÂÔØ
- * downloadWithResume("http://example.com/largefile.zip", "/sdcard/file.zip");
- */
- function downloadWithResume(url, savePath) {
- var http = new okHttp();
- var file = new java.io.File(savePath);
- var existingSize = 0;
-
- // ¼ì²éÊÇ·ñÓÐÒÑÏÂÔØµÄ²¿·ÖÎļþ
- if (file.exists()) {
- existingSize = file.length();
- printl("·¢ÏÖÒÑÏÂÔØ²¿·Ö: " + (existingSize / 1024).toFixed(2) + " KB");
- http.setHeader("Range", "bytes=" + existingSize + "-");
- }
-
- var response = http.get(url);
- var statusCode = http.getStatusCode();
-
- if (statusCode === 206 || (statusCode === 200 && existingSize === 0)) {
- var fos;
- if (existingSize > 0) {
- fos = new java.io.FileOutputStream(file, true); // ×·¼Óģʽ
- } else {
- fos = new java.io.FileOutputStream(file);
- }
-
- fos.write(response.getBytes());
- fos.close();
-
- var finalSize = file.length();
- printl("✅ ÏÂÔØÍê³É£¬×Ü´óС: " + (finalSize / 1024).toFixed(2) + " KB");
- return true;
- } else {
- printl("❌ ÏÂÔØÊ§°Ü£¬×´Ì¬Âë: " + statusCode);
- return false;
- }
- }
- /**
- * ÅúÁ¿ÏÂÔØÎļþ²¢Í³¼Æ½á¹û
- *
- * ¹¤×÷Á÷³Ì£º
- * 1. ±éÀúÏÂÔØÈÎÎñÁбí
- * 2. ¶Ôÿ¸öÈÎÎñµ÷ÓÃdownloadFile()½øÐÐÏÂÔØ
- * 3. ¼Ç¼³É¹¦/ʧ°ÜÊýÁ¿ºÍÀÛ¼ÆÎļþ´óС
- * 4. Êä³öÏêϸµÄÏÂÔØ½ø¶ÈºÍͳ¼ÆÐÅÏ¢
- * 5. ·µ»ØÍ³¼Æ½á¹û¶ÔÏó
- *
- * ÌØµã£º
- * - ×Ô¶¯Í³¼ÆÏÂÔØ³É¹¦ÂÊ
- * - ¼ÆËã×ÜÏÂÔØÎļþ´óС
- * - ÌṩÏêϸµÄÈÕÖ¾Êä³ö
- * - µ¥¸öÎļþʧ°Ü²»Ó°ÏìÆäËûÎļþÏÂÔØ
- *
- * @param {Array} downloadList - ÏÂÔØÈÎÎñÊý×飬ÿÏî°üº¬£º
- * - url: String - ÎļþÏÂÔØµØÖ·
- * - path: String - ±¾µØ±£´æÂ·¾¶
- * @returns {Object} ͳ¼Æ½á¹û¶ÔÏó£º
- * - success: Number - ³É¹¦ÏÂÔØµÄÎļþÊýÁ¿
- * - failed: Number - ʧ°ÜµÄÎļþÊýÁ¿
- * - totalSize: Number - ËùÓгɹ¦ÎļþµÄ×Ü×Ö½ÚÊý
- *
- * ʾÀý£º
- * var tasks = [
- * {url: "http://example.com/img1.png", path: "/sdcard/img1.png"},
- * {url: "http://example.com/img2.png", path: "/sdcard/img2.png"}
- * ];
- * var result = batchDownload(tasks);
- * printl("³É¹¦ÂÊ: " + (result.success / (result.success + result.failed) * 100) + "%");
- */
- function batchDownload(downloadList) {
- var successCount = 0;
- var failCount = 0;
- var totalSize = 0;
-
- printl("=== ¿ªÊ¼ÅúÁ¿ÏÂÔØ ===");
- printl("×ܹ²ÐèÒªÏÂÔØ: " + downloadList.length + " ¸öÎļþ");
-
- for (var i = 0; i < downloadList.length; i++) {
- var item = downloadList[i];
- printl("\n--- ÏÂÔØµÚ " + (i + 1) + " ¸öÎļþ ---");
- printl("URL: " + item.url);
- printl("±£´æÂ·¾¶: " + item.path);
-
- var result = downloadFile(item.url, item.path);
- if (result) {
- successCount++;
- var fileSize = new java.io.File(item.path).length();
- totalSize += fileSize;
- } else {
- failCount++;
- }
- }
-
- printl("\n=== ÅúÁ¿ÏÂÔØÍê³É ===");
- printl("³É¹¦: " + successCount + " ¸ö");
- printl("ʧ°Ü: " + failCount + " ¸ö");
- printl("×Ü´óС: " + (totalSize / 1024 / 1024).toFixed(2) + " MB");
-
- return {
- success: successCount,
- failed: failCount,
- totalSize: totalSize
- };
- }
- // ʹÓÃʾÀý - ÅúÁ¿ÏÂÔØ²âÊÔ
- printl("\n=== ÅúÁ¿ÏÂÔØÊ¾Àý ===");
- var downloadTasks = [
- {
- url: "https://www.baidu.com/img/PCfb_5bf082d29588c07f842ccde3f97243ea.png",
- path: "/sdcard/Download/batch_test_1.png"
- },
- {
- url: "https://httpbin.org/image/png",
- path: "/sdcard/Download/batch_test_2.png"
- }
- ];
- var batchResult = batchDownload(downloadTasks);
- printl("ÅúÁ¿ÏÂÔØÍ³¼Æ: " + JSON.stringify(batchResult));
¸´ÖÆ´úÂë
|
|