تحويل عناوين URL القصيرة للتحميل إلى عناوين كاملة

قد أكون أخطأت في التوجيه هنا، لذا أعتذر إن كان الأمر كذلك - لكن أي تلميحات مرحب بها جدًا!

هناك بعض الخيوط في موقع Discourse الخاص بنا تُعرض جزئيًا على موقعنا الرئيسي. لأن النسخة المطبوقة من المنشور تحتوي على كل HTML الخاص بlightbox، وهو ما لا نريده على الموقع الرئيسي، فأنا أعمل مع النسخة الخام للمنشور.

أحد الأشياء التي تُربكني هو روابط تحميل الملفات. كيف يمكنني تحويل رابط upload:// إلى رابط كامل؟ لقد حاولت البحث وصادفت SHA1 و Base62، لكن بغض النظر عن ذلك، مهما حاولت، لا أستطيع الحصول على الرابط الكامل.

كما قلت، قد أكون أنظر إلى الشيء الخطأ، أو أن هناك (على الأرجح) طريقة أسهل للتعامل مع هذه الأمور، لذا أي نصائح مرحب بها!

شكرًا مقدّمًا

قم أولاً بفك تشفير base62 باستخدام مجموعة الأحرف المعكوسة، ثم قم بتشفير النتيجة بصيغة سداسية عشرية.

في كود بايثون، يبدو الأمر كالتالي:

rebase = hex(base62.decode(base, base62.CHARSET_INVERTED))[2:].zfill(40)

شكرًا لك على الرد السريع @michaeld. سأجرب ذلك لاحقًا اليوم :slight_smile:


لأي شخص مهتم وينفذ هذا في PHP، استخدمت مكتبة Composer تسمى base62 by tuupola.

هذا هو الكود الذي استخدمته:

<?php

$base62 = new Tuupola\Base62(["characters" => Tuupola\Base62::INVERTED]);

/** تعيين اسم الملف الأصلي، باستثناء أي امتدادات للملف */
$s = "r3AYqESanERjladb4vBB7VsMBm6";

/** فك التشفير، التحويل إلى صيغة سداسية عشرية */
$decoded = $base62->decode($s);

/** النتيجة المتوقعة: bda2c513e1da04f7b4e99230851ea2aafeb8cc4e */
echo bin2hex($decoded);

مثير للاهتمام. لا يمكنني تكرار هذا باستخدام جافاسكريبت. لأن طريقتك الأخيرة هي تحويل binary2hex ولكن النتيجة من فك تشفير base62 ليست تمثيلًا ثنائيًا مما أفهمه.

من منظور جافاسكريبت، وجدت الأشياء التالية مفيدة:
https://www.npmjs.com/package/aybabtu

function fromBase62(s) {
  var digits = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  var result = 0;
  for (var i = 0; i < s.length; i++) {
    var p = digits.indexOf(s[i]);
    if (p < 0) {
      return NaN;
    }
    result += p * Math.pow(digits.length, s.length - i - 1);
  }
  return result;
}

للأسف، لا تساعد طرق bin2hex ولا dec2hex، عندما أستخدم سلاسل الإدخال الخاصة بك.

لقد أنشأت صندوق رموز لهذه المشكلة إذا كان شخص ما مهتمًا باللعب بها. القيمة النهائية هي 1 لسلسلة الإدخال الخاصة بي وهو أمر خاطئ ؛ (

شكرًا

يجب أن تكون قادرًا على استخدام binVal.toString(16) للحصول على القيمة السداسية عشرية.
ومع ذلك، أعتقد (!) أن النتيجة الوسيطة كبيرة جدًا بحيث لا تتناسب مع عدد صحيح عادي.

شكراً على التلميح يا ريتشارد، لكنني لم أتقدم أكثر حتى مع هذه الفكرة.

لا أعرف، ألن يكون من الجيد وجود إعداد مثل “تمكين روابط التحميل المطلقة في طرق العرض الخام (المسارات)”. سأستخدم ذلك بالتأكيد في حالتنا - لأنه، حسب فهمي، فإن تقصير عنوان URL للتحميل هو مجرد تحسينات في الخطاب لتقليل التعليمات البرمجية؟ لا علاقة له بـ Markdown.

هل يمكن لأي شخص من فريق discourse تقديم طريقة JS يمكنها استعادة عنوان URL المطلق؟
سيكون ذلك مفيدًا للمجتمع، فكروا في الأمر.

أنا غير قادر على تحقيق ذلك :frowning:

@RGJ هل تعرف أي شخص في فريق Discourse لتقديم هذه الوظيفة المساعدة؟

لا…
أقترح عليك نشر هذا في Marketplace.

قد تقول المزيد عن حالة الاستخدام الخاصة بك. ربما هذا ليس أفضل حل.

لن تتمكن أبدًا من إعادة بناء عنوان URL للتحميل بالكامل دون نوع من الواجهة لقاعدة بيانات Discourse. المسار الكامل للتحميل يعتمد على id التحميل، والذي لا يمكن تحديده من عنوان URL القصير.

كما قال @pfaffman، قد نتمكن من المساعدة أكثر إذا وصفت حالة الاستخدام الخاصة بك.