25.03.2018, 22:55
|
Интересующийся
|
|
Регистрация: 30.01.2018
Сообщений: 29
|
|
await uploadFile(req);
var l = await changeImage({
'uploadfile': fs.createReadStream('./files/temp.jpg'),
'ef-set': 10,
'ef-set-2': 10,
'jpeg-quality': 80
}, 'https://www.imgonline.com.ua/grid-square-result.php',
'http://www.imgonline.com.ua/',
new RegExp(/download\.php\?file=.+?\.jpg/));
await loadFile(l);
l = await changeImage({
'uploadfile': fs.createReadStream('./files/temp.jpg'),
'efset1': 2,
'outformat': 2,
'jpegtype': 1,
'jpegqual': 85,
'jpegmeta': 1
},
'https://www.imgonline.com.ua/add-effect-black-white-result.php', '',
new RegExp(/https:\/\/.+?\.jpg/g)
);
await loadFile(l);
res.end('files/temp.jpg')
Там вот должно идти. changeImage и loadFile 2 раза вызываются с разными параметрами.
Все поправил, как ты сказал. Только всё равно падает. Выясняю почему...
|
|
26.03.2018, 00:00
|
Интересующийся
|
|
Регистрация: 30.01.2018
Сообщений: 29
|
|
Теперь простыня выглядит вот так. НО ВСЁ РАВНО падает. Бесит уже
var fs = require('fs'),
http = require('http'),
url = require('url'),
multiparty = require('multiparty'),
request = require('request');
var server = new http.Server();
//получить локальный ip на который нужно подключаться
var ifs = require('os').networkInterfaces();
var result = Object.keys(ifs)
.map(x => [x, ifs[x].filter(x => x.family === 'IPv4')[0]])
.filter(x => x[1])
.map(x => x[1].address)[2]; // [2] - номер в списке
console.log('\nUse this ip: ' + result);
console.log("Successfully started\n");
server.listen('80', result);
server.on('request', onRequest);
async function onRequest(req, res) {
var parsed = url.parse(req.url, true);
switch (parsed.pathname) {
case '/':
case '/index.html':
fs.readFile('index.html', function(err, file) {
if (err) res.end();
res.end(file);
});
break;
case '/file':
await uploadFile(req);
var l = await changeImage({
'uploadfile': fs.createReadStream('./files/temp.jpg'),
'ef-set': 10,
'ef-set-2': 10,
'jpeg-quality': 80
}, 'https://www.imgonline.com.ua/grid-square-result.php',
'http://www.imgonline.com.ua/',
new RegExp(/download\.php\?file=.+?\.jpg/));
await loadFile(l);
// l = await changeImage({
// 'uploadfile': fs.createReadStream('./files/temp.jpg'),
// 'efset1': 2,
// 'outformat': 2,
// 'jpegtype': 1,
// 'jpegqual': 85,
// 'jpegmeta': 1
// },
// 'https://www.imgonline.com.ua/add-effect-black-white-result.php', '',
// new RegExp(/https:\/\/.+?\.jpg/)
// );
// await loadFile(l);
res.end('files/temp.jpg')
break;
default:
fs.readFile('./' + req.url, function(err, file) {
if (err) res.end();
res.end(file);
});
}
}
function uploadFile(req) {
if (fs.exists('./files/temp.jpg')) {
fs.unlink('./files/temp.jpg', function() {});
}
var form = new multiparty.Form();
form.parse(req, function(err, fields, files) {
var path = files.uploadfile[0].path;
fs.copyFile(path, './files/temp.jpg', function() {
fs.unlink(path, function(err) {
if (err) console.log(err);
return;
});
});
});
}
function changeImage(formData, url, link, regExp) {
return new Promise(function(resolve, reject) {
request.post({
url: url,
formData: formData
},
function(err, resp, body) {
if (err) {
console.log('ERR: ', err);
}
link += body.match(regExp);
resolve(link);
});
})
}
function loadFile(link) {
return new Promise(function(resolve, reject) {
request
.get(link)
.on('response', function(response) {})
.pipe(fs.createWriteStream('./files/temp.jpg'))
.on('finish', function() {
resolve();
});
})
}
|
|
26.03.2018, 13:36
|
Интересующийся
|
|
Регистрация: 30.01.2018
Сообщений: 29
|
|
Функция uploadFile работает как-то с ошибками, потому что если закоментить её в потоке выполнения, то ошибки выпадают другие. Это раз.
Теперь changeImage почему - то не работает. То в тихую падает, то еще чего. А по телу страницы body из нёё видно, что она не может передать загружаемый файл куда надо, потому что на странице ошибка получения файла
|
|
26.03.2018, 14:41
|
Интересующийся
|
|
Регистрация: 30.01.2018
Сообщений: 29
|
|
функция loadFile тоже работает через задницу. Ничего толком скачать не может
|
|
26.03.2018, 15:16
|
Интересующийся
|
|
Регистрация: 30.01.2018
Сообщений: 29
|
|
Всё. Теперь работает всё кроме первой uploadFile. На ней падает втихую
|
|
26.03.2018, 19:45
|
Интересующийся
|
|
Регистрация: 30.01.2018
Сообщений: 29
|
|
По видимости, файл в uploadFile не успевает создаться и вызывается уже следующая функция, которой этот файл нужен, а так как его еще нет, то соответственно всё и падает. Что странно. Попробовал uploadFile через промис сделать, толку всё равно нет
|
|
27.03.2018, 13:23
|
Профессор
|
|
Регистрация: 28.04.2017
Сообщений: 214
|
|
Вообще-то да.
Я попробовал вот так
function bar() {
fs.readFile('_moment.js', (err, data) => {
console.log('file');
});
}
async function foo() {
await bar();
console.log('ok');
}
foo();
и так
function bar() {
return new Promise( resolve => {
fs.readFile('_moment.js', (err, data) => {
console.log('file');
resolve();
});
});
}
async function foo() {
await bar();
console.log('ok');
}
foo();
Вывод в разном порядке.
await на функции без промисов не действует.
Внутренности функции надо заворачивать в промис в любом случае - предполагается у него then или нет.
Последний раз редактировалось Audaxviator, 27.03.2018 в 13:30.
|
|
27.03.2018, 14:53
|
Интересующийся
|
|
Регистрация: 30.01.2018
Сообщений: 29
|
|
В общем, спасибо. Решил тем, что разделил всю котовасию на два запроса. Первый - для загрузки файла на сервер, второй для выполнения остальной логики. Всё заработало.
|
|
|
|