2016-11-25 3 views
0

Привет, я сталкиваюсь с проблемой при загрузке файла в Node Js im, используя пост и методы get. Ниже мой кодНевозможно загрузить файл в виде вложения в узле js

router.post('/download',function(req,res,next){ 
    var files=req.body; 
    console.log(files[0]); 
    var file_url = 'D:/Techh/Orginal/configR/uploads/'+files[0]; 
    console.log(file_url); 
    res.redirect('/'+files[0]); 
}); 

Выше службы вызывается из клиента, а затем он перенаправляется ниже службы

app.get('/:file(*)', function(req, res, next){ 
    var file = '/'+req.params.file, path = 'D:/Techh/Orginal/configR/uploads' +file; 
    res.download(path); 
}); 

Но я не могу видеть, файл получать загружены в браузере, а я в состоянии увидеть ответ в консоли браузера показано на рисунке ниже

img

+0

Вы запрашиваете скачивание с помощью AJAX? Как он регистрируется на консоли? –

+0

Таким образом вы подвергаете всю свою файловую систему интернету –

+0

. Что представляет собой код в браузере? Почему вы ожидаете, что ответ будет «загружен»? Он уже загружен, он находится в консоли. Какова ваша цель? –

ответ

0

Не используйте ajax, используйте submit в iframe. Мы в состоянии видеть загрузку файла в браузере

<FORM action="http://example.com/script.php" 
     method="POST" target="hidden-form"> 
    <input type="hidden" name="filename" value="sdsfsfd"/> 
</FORM> 
<IFRAME style="display:none" name="hidden-form"></IFRAME> 

Кроме того, что-то вроде этого

'D:/Techh/Orginal/configR/uploads/'+files[0]; 

довольно опасно, если кто-то попытается что-то вроде ../../../ ../secretfile, и т.д .. Очистить путь перед:

var a = "../../../sdfsdf.txt" 
a.substr(a.lastIndexOf("/")+1); // sdfsdf.txt 
0

насколько я понимаю ваши намерения, вы хотите, чтобы в основном начать загрузку, когда пользователь нажимает что-то, не покидая страницы. Поскольку сервер отправляет файл как скачать, все, что вам нужно сделать на клиенте

window.location.href = "/download/filename"; 

Сервер должен обрабатывать GET для /download/:filename по телефону res.download()

-1

Пытались установить заголовок? Я не вижу этого в вашем коде, поэтому я предлагаю вам установить тип контента для вашего ответа.

Посмотрите здесь для лучшего понимания заголовков ответа: Node.js Documentation about response header

И сослаться на этот вопрос решения для примера реализации:

StackOverflow question about pdf file download using Node.js

Edit: Еще одна вещь FYI , ошибка, которую вы получаете, заключается в том, что браузер получает некоторые данные, и он не знает, что с ним делать. Вы должны сказать ему, какие данные получают, чтобы он знал, что с ним делать. Вот почему вам нужен заголовок ответа, чтобы сообщить браузеру, какие данные передаются.

Надеюсь, это поможет.

+0

Заголовок задается вызовом 'res.download()'. Проблема в том, что OP делает запрос AJAX к файлу, что означает, что он попадает в ответ вместо запуска браузера для начала загрузки. –

+0

@ChrisG, можете ли вы предоставить доказательства об этом? Я просмотрел документацию Nodejs и документацию Expressjs, и оба они подчеркивают то же самое относительно установки типа контента. Если op не использует что-то другое, мое предложение верное. – iniestar

+0

Обратите внимание, что я не имею в виду запрос Ajax, я не пробовал его, поэтому не могу сказать, является ли это проблемой или нет. – iniestar

Смежные вопросы