私はそうのようなnodejsルータにWebページからのXMLHttpRequestを送信:nodejsでファイルをダウンロードできないのはなぜですか?
var name = $(this).find('td:eq(0)').html();
var docNum = $('#docNum').val();
//alert("fileName=" + name + "&docNum=" + docNum);
xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 && xhttp.status == 200) {
isUnique = xhttp.responseText;
if(isUnique == "false"){
alert("ID is not unique please pick another document ID ");
}else{
$("form#docForm").submit();
}
}
};
xhttp.open("POST", "/downloadDocument", true);
xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
var params = "fileName=" + name + "&docNum=" + docNum;
xhttp.send(params);
そして、これが正常に動作し、要求がルータに取得し、ルータが正しく変数の両方を読み取ることができます。
これは正常に動作しないルータコードの一部です:
router.post("/downloadDocument", function(req, res){
var doc = req.body.docNum;
var fileName = req.body.fileName;
var document = Document.findOne({Name: fileName, Dossier: doc}, function(err, obj){
var path = obj.Name;
console.log(path);
fs.writeFile(obj.Name, obj.File);
res.download("./" + obj.Name);
});
});
そして、それがないすべては、前のページに私をリダイレクトしている、それもファイルが、ファイルをダウンロードしません。存在し、私は理由を知らない。
私もここで
var filestream = fs.createReadStream(obj.File);
filestream.pipe(res);
代わりのres.download
を使用してみましたが、この要求のコンソール出力です:
Apples.jpg
POST /downloadDocument 200 4.814 ms - -
POST /dossierEdit 302 12.898 ms - 62 #This part concerns me and redirects me while i do not ask for this page in my code
GET /dossiers 304 20.793 ms - -
GET /public/stylesheets/css/bootstrap.min.css 304 2.737 ms - -
GET /public/stylesheets/css/simple-sidebar.css 304 2.921 ms - -
GET /public/stylesheets/style.css 304 2.327 ms - -
GET /public/stylesheets/css/font-awesome.min.css 404 3.502 ms - 56
GET /public/css/style.css 404 1.097 ms - 33
GET /public/stylesheets/css/font-awesome.min.css 404 0.492 ms - 56
GET /public/css/style.css 404 1.107 ms - 33
だけ明確にするために、私の目標はにありますファイルをクライアントに送信し、サーバーに保存しないでください。
はDocument.findOne()のコールバック関数です。ログにパスが表示されますか? (console.log(path)のため) – frank
はいコールバックが実行され、私が入れたファイル名だけで表示されるパスが表示されます。私が入れていないファイルをダウンロードしようとするとコンソールエラーが表示されます –
findOneはMongooseを使ったmongoDBリクエストです。mongoデータベースにファイルを保存し、findOne関数を使ってダウンロードしたいファイルをリクエストし、fs.writeFileを使ってローカルファイルを作成します。ローカルに、私はそれらを開くことができます)と今私がしようとしているものは、動作していないそれらをダウンロードしています。 –