diff --git a/lib/server/main.js b/lib/server/main.js index dc0b05b0..e2c33ef6 100644 --- a/lib/server/main.js +++ b/lib/server/main.js @@ -225,35 +225,35 @@ * @param pGzip - данные сжаты gzip'ом */ function sendFile(pParams) { - var name, header, lRet = checkParams(pParams); + var header, lRet = checkParams(pParams); if (lRet) { var p = pParams, lGzip = isGZIP(p.request) && p.gzip; - p.response.statusCode = OK; - - header = generateHeaders({ - name : p.name, - cache : p.cache, - gzip : lGzip, - query : getQuery(p.request) - }); - - for (name in header) - p.response.setHeader(name, header[name]); - - pipe.create({ - from: p.name, - write: p.response, - zip : lGzip && !p.gziped, - callback: function(pError) { - var lError = pError && pError.toString(); + fs.stat(p.name, function(error, stat) { + if (error) + sendError(pParams, error); + else { + p.response.statusCode = OK; - if (pError) { - p.response.statusCode = FILE_NOT_FOUND; - p.response.end(lError); - } + header = generateHeaders({ + name : p.name, + cache : p.cache, + gzip : lGzip, + query : getQuery(p.request) + }); + + setHeader(header, p.response); + + pipe.create({ + from : p.name, + write : p.response, + zip : lGzip && !p.gziped, + callback: function(error) { + sendError(pParams, error); + } + }); } }); } @@ -296,7 +296,8 @@ p.data = pParams.data; } - p.response.writeHead(p.status || OK, lHead); + setHeader(lHead, p.response); + p.response.statusCode = p.status || OK; p.response.end(p.data); }, @@ -452,4 +453,12 @@ return lGZIP; } + function setHeader(header, response) { + var name; + + if (Util.isObject(header)) + for (name in header) + response.setHeader(name, header[name]); + } + })();