mirror of
https://github.com/coderaiser/cloudcmd.git
synced 2026-01-23 18:55:26 +00:00
refactor(main) sendFile asyncCall -> lstat
This commit is contained in:
parent
901eb2d674
commit
9e6d235cb7
1 changed files with 23 additions and 25 deletions
|
|
@ -232,7 +232,7 @@
|
|||
Util.copyObj(header, {
|
||||
'Content-Range' : 'bytes ' + p.range.start +
|
||||
'-' + p.range.end +
|
||||
'/' + p.length,
|
||||
'/' + p.range.sizeTotal,
|
||||
|
||||
'Content-Length': p.range.size
|
||||
});
|
||||
|
|
@ -279,35 +279,32 @@
|
|||
* @param pGzip - данные сжаты gzip'ом
|
||||
*/
|
||||
function sendFile(params) {
|
||||
var isGzip, getTime, getSize, ext,
|
||||
var isGzip,
|
||||
p = params,
|
||||
ret = checkParams(params);
|
||||
|
||||
if (ret) {
|
||||
isGzip = isGZIP(p.request) && p.gzip;
|
||||
ext = Util.getExtension(p.name);
|
||||
|
||||
getTime = Util.bind(time.get, p.name, {
|
||||
str: true
|
||||
});
|
||||
|
||||
getSize = Util.bind(dir.getSize, p.name);
|
||||
|
||||
Util.asyncCall([getTime, getSize], function(timeData, sizeData) {
|
||||
var error = timeData[0] || sizeData[0],
|
||||
time = timeData[1],
|
||||
length = sizeData[1],
|
||||
range = getRange(p.request, length);
|
||||
|
||||
if (error) {
|
||||
fs.lstat(p.name, function(error, stat) {
|
||||
var time, length, range;
|
||||
|
||||
if (error) {
|
||||
sendError(params, error);
|
||||
} else {
|
||||
time = stat.mtime,
|
||||
length = stat.size,
|
||||
range = getRange(p.request, length);
|
||||
|
||||
if (range)
|
||||
Util.copyObj(p, {
|
||||
range : range,
|
||||
status : RANGE
|
||||
});
|
||||
|
||||
Util.copyObj(p, {
|
||||
isGzip : isGzip && !range,
|
||||
time : time,
|
||||
range : range,
|
||||
length : length,
|
||||
status : range ? RANGE : OK
|
||||
time : time
|
||||
});
|
||||
|
||||
mainSetHeader(params);
|
||||
|
|
@ -480,20 +477,21 @@
|
|||
response.setHeader(name, header[name]);
|
||||
}
|
||||
|
||||
function getRange(req, totalSize) {
|
||||
function getRange(req, sizeTotal) {
|
||||
var range, start, end, size, parts,
|
||||
rangeStr = req.headers.range;
|
||||
|
||||
if (rangeStr) {
|
||||
parts = rangeStr.replace(/bytes=/, "").split("-");
|
||||
start = parts[0];
|
||||
end = parts[1] || totalSize - 1;
|
||||
end = parts[1] || sizeTotal - 1;
|
||||
size = (end - start) + 1;
|
||||
|
||||
range = {
|
||||
start : start - 0,
|
||||
end : end - 0,
|
||||
size : size
|
||||
start : start - 0,
|
||||
end : end - 0,
|
||||
size : size,
|
||||
sizeTotal : sizeTotal
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue