Jak mogę pobrać plik znajdujący się na moim serwerze na mój komputer uzyskujący dostęp do strony na serwerze nodeJS?
Korzystam z ExpressJS i próbowałem tego:
app.get('/download', function(req, res){
var file = fs.readFileSync(__dirname + '/upload-folder/dramaticpenguin.MOV', 'binary');
res.setHeader('Content-Length', file.length);
res.write(file, 'binary');
res.end();
});
Ale nie mogę uzyskać nazwy pliku i typu (lub rozszerzenia). Czy ktoś może mi w tym pomóc?
Odpowiedzi:
Aktualizacja
Express ma pomocnika, który ułatwia życie.
Stara odpowiedź
Jeśli chodzi o twoją przeglądarkę, nazwa pliku to po prostu „pobierz”, więc musisz podać mu więcej informacji, używając innego nagłówka HTTP.
Możesz również wysłać typ MIME, taki jak ten:
Jeśli chcesz czegoś bardziej dogłębnego, proszę bardzo.
Możesz ustawić wartość nagłówka na cokolwiek zechcesz. W tym przypadku używam biblioteki typu mime - node-mime , aby sprawdzić, jaki jest typ mime pliku.
Inną ważną rzeczą do odnotowania tutaj jest to, że zmieniłem twój kod, aby używał readStream. Jest to o wiele lepszy sposób na robienie rzeczy, ponieważ używanie dowolnej metody z 'Synchronizuj' w nazwie jest niezadowolone, ponieważ węzeł ma być asynchroniczny.
źródło
res.setHeader('Content-disposition', 'attachment; filename=' + filename);
tnx!.set()
zamiast.setHeader()
btwPosługiwać się
res.download()
Przesyła plik pod ścieżką jako „załącznik”. Na przykład:
res.download()
źródło
nodejs proxy file download response
najlepszych praktykW przypadku plików statycznych, takich jak pdf, Word Word itp. Wystarczy użyć funkcji statycznej Express w swojej konfiguracji:
A potem po prostu umieść wszystkie swoje pliki w tym „publicznym” folderze, na przykład:
A następnie zwykły stary link pozwoli użytkownikowi go pobrać:
źródło
this.use('/topsecret', mGetLoggedInUser, mEnsureAccess, express.static('topsecret'))
... a następnie każde żądanie przechodzi przez mEnsureAccess. Oczywiście oznacza to, że musisz być w stanie określić poziom dostępu użytkownika na podstawie adresu URL bezpiecznego dokumentu lub cokolwiek innego.W Express 4.x istnieje
attachment()
metodaResponse
:źródło
źródło
Oto jak to robię:
Kod:
źródło
window.open("/api/get_audio_file");
, patrz: stackoverflow.com/a/20177012