Linkowanie do pobrania niestandardowych formatów w a href

0

Potrzebuję zrobić, żeby można było ze strony pobierać różne pliki głównie w formatach 3d (.obj, .stl, .dxf itd). Problem w tym, że nie wszystkie działają. Mam na myśli to, że np. format .stl mogę zamieścić w ten sposób:

<a href="test/test.stl" target="_blank" class="download-link">Plik w formacie .stl</a>

natomiast formatu .obj już nie mogę bo podczas próby pobrania wyświetla się niepowodzenie - brak pliku (ścieżka jest w 100% prawidłowa). Znalazłem jeden sposób aby to naprawić, zmienić format pliku na txt i podczas pobrania znowu zmienić na obj. jednak nie jest to sposób który mnie zadowala.

<a href="test/test.txt" target="_blank" class="download-link" download="test.obj">Plik w formacie .obj</a>

Macie jakieś inne pomysły jak mógłbym wstawić link pobierający z takimi "niestandardowymi" formatami?

3

Nie ma żadnego mocnego powodu, by po stronie serwera jednakowo podawane typy plików były serwowane odmiennie (za wyjątkiem mine-types) *)
Na pewno nie kopie w pupę jakiś antywirus, albo samoistne zabezpieczenie przeglądarki, na kliencie?

*) BTW jaki serwer, o ile linux jaka dystrybucja ?

0

Win Serwer 2016 IIS 10

(za wyjątkiem mine-types)

Aha, zapomniałem o tym czymś, dodanie formatów załatwiło sprawę dzięki.

1

EDIT:

Raloseq napisał(a):

(za wyjątkiem mine-types)

Aha, zapomniałem o tym czymś, dodanie formatów załatwiło sprawę dzięki.

Pisałem post tak długo, że nie zauważyłem rozwiązania problemu :D

W takim razie poniższy skrypt jest niepotrzebny


https://itnext.io/how-to-download-files-with-javascript-d5a69b749896

Możliwe, że też pojawi się blokada po stronie przeglądarki, ale nie zaszkodzi spróbować takiego rozwiązania

<button data-download="https://xxx.pl/static/assets/file.obj" data-name="file.obj">
   Plik w formacie .obj
</button>

<script>
  const buttonsFile = document.querySelectorAll('[data-download]');

  for (const buttonFile of buttonsFile) {
    buttonFile.addEventListener('click', async () => {
      const file = await fetch(buttonFile.dataset.download);
      const fileBlob = await file.blob();
      const fileUrl = URL.createObjectUrl(fileBlob);
      
      const anchor = document.createElement('a');
      anchor.href = fileUrl;
      anchor.download = buttonFile.dataset.name;

      anchor.click();
    });
  }
</script>

Zamieniamy znacznik <a> na jakiś inny element z atrybutem data-download (ścieżka do pliku na serwerze), oraz data-name (nazwa pliku po ściągnięciu na dysk użytkownika). Pobieramy plik przez funkcję fetch, zamieniamy zawartość pliku na blob'a, generujemy nowy adres i pobieramy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1