Maison >interface Web >js tutoriel >Comment nodejs utilise le module http pour écrire le client de test de l'interface d'image de téléchargement

Comment nodejs utilise le module http pour écrire le client de test de l'interface d'image de téléchargement

php中世界最好的语言
php中世界最好的语言original
2018-03-12 11:18:422620parcourir

Cette fois, je vais vous montrer comment utiliser le module http pour écrire un client de test d'interface d'image de téléchargement dans nodejs Quelles sont les précautions pour que nodejs utilise le module http pour écrire un test d'interface d'image de téléchargement. client. Ce qui suit est un cas pratique. Levez-vous et jetez un œil.

Construisez un serveur de test de téléchargement simple

Par exemple : écrivez un serveur simple avec python flask

from flask import Flask, url_for, request,redirect,send_from_directoryimport os 
app = Flask(name)
app.config['UPLOAD_FOLDER'] = 'uploads/'  # 保存文件位置ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'])@app.route('/uploads/<filename>')def uploaded_file(filename):
    return send_from_directory(app.config['UPLOAD_FOLDER'], filename)@app.route('/', methods=['GET', 'POST'])def upload_file():
    if request.method == 'POST': 
        file = request.files['file']        if file : 
            file.save(os.path.join(app.config['UPLOAD_FOLDER'], file.filename))            return redirect(url_for('uploaded_file',
                                    filename=file.filename))    return '''
    <html><head><title>上传测试</title>
    </head><body><h1>上传测试</h1>
    <script>
        function upl(){
            var form = new FormData();
            form.append("file", document.getElementsByName("file")[0].files[0]);
            var oReq = new XMLHttpRequest();
            oReq.open("POST", "/");
            oReq.send(form);
        }
    </script>
    <form action="" method="post" enctype="multipart/form-data">
      <p><input type="file" name="file">
         <input type="submit" value="表单提交">
    </p></form>
         <input type="button" value="ajax提交" onclick="upl()">
   </body> </html>
    '''with app.test_request_context():  # 输出url
    passif name == 'main':    # app.debug = True
    app.run()

Observez le logo d'en-tête de téléchargement

.

Exécutez Ouvrez le navigateur pour accéder au serveur, ouvrez la console à l'adresse, téléchargez n'importe quel fichier et observez

3 Nodejs écrit le client de test de téléchargement

var http = require('http');var querystring = require('querystring');var fs = require('fs');var post_data = { };//post提交数据var content = querystring.stringify(post_data);#将对象转换成字符串,字符串里多个参数将用 ‘&' 分隔,将用 ‘=' 赋值var boundaryKey = new Date().getTime();//创建随机切割标识字 你可以百度 'multipart form-data boundary'了解//var boundaryKey =Math.random().toString(16); var options = {
    hostname: '127.0.0.1',
    port: 5000,
    path: '/',
    method: 'POST',
    headers: {        // 'Accept': '*/*',
        // 'Accept-Encoding': 'gzip, deflate',
        // 'Connection': 'keep-alive',
        'Content-Type':'multipart/form-data; boundary=----'+boundaryKey,//文件上传标识与切割标识
        // 'Host':'127.0.0.1:5000',
        // 'Origin':'http://127.0.0.1:5000',
        // 'Referer':'http://127.0.0.1:5000/',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'
    }
};var req = http.request(options, function (res) {
    res.setEncoding('utf8');
    console.log('STATUS: ' + res.statusCode);
    console.log('HEADERS: ' + JSON.stringify(res.headers));
    res.on('data', function (chunk) {
        console.log('BODY: ' + chunk);
    });
    res.on('end', function () {
        console.log('res end');
    });
});var payload ='\r\n------'+boundaryKey+'\r\n' +    'Content-Disposition: form-data; name="file"; filename="test.png"\r\n' +    'Content-Type: image/png\r\n\r\n';var enddata = '\r\n------'+boundaryKey+'--'; 
req.setHeader('Content-Length', Buffer.byteLength(payload) + Buffer.byteLength(enddata) + fs.statSync("./test.png").size);
req.write(payload);var fileStream = fs.createReadStream("./test.png", { bufferSize: 4 * 1024 });
fileStream.pipe(req, { end: false });
fileStream.on('end', function () { 
    req.end(enddata);
});
req.on('error', function (e) {
    console.log('problem with request: ' + e.message);
});
  
req.write(content);// req.end();

Il y a. une autre façon d'écrire :

var http = require('http');var querystring = require('querystring');var fs = require('fs');var boundaryKey = new Date().getTime()//Math.random().toString(16); //创建随机切割标识字var options = {    hostname: '127.0.0.1',    port: 5000,    path: '/',    method: 'POST',    headers: {        // 'Accept': '*/*',
        // 'Accept-Encoding': 'gzip, deflate',
        // 'Connection': 'keep-alive',
        'Content-Type': 'multipart/form-data; boundary=----' + boundaryKey,        // 'Host':'127.0.0.1:5000',
        // 'Origin':'http://127.0.0.1:5000',
        // 'Referer':'http://127.0.0.1:5000/',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'
    }
};var req = http.request(options, function (res) {
    res.setEncoding('utf8');    console.log('STATUS: ' + res.statusCode);    console.log('HEADERS: ' + JSON.stringify(res.headers));
    res.on('data', function (chunk) {        console.log('BODY: ' + chunk);
    });
    res.on('end', function () {        console.log('res end');
    });
});var payload = '\r\n------' + boundaryKey + '\r\n' +    'Content-Disposition: form-data; name="file"; filename="test.png"\r\n' +    'Content-Type: image/png\r\n\r\n';var enddata = '\r\n------' + boundaryKey + '--';var fileStream=fs.readFileSync("./test.png");
req.setHeader('Content-Length', Buffer.byteLength(payload) + Buffer.byteLength(enddata) + fs.statSync("./test.png").size);console.log(payload);
req.write(payload);console.log(fileStream);
req.write(fileStream);console.log(enddata);
req.end(enddata);
req.on('error', function (e) {    console.log('problem with request: ' + e.message);
});

Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php !

Lecture connexe :

Graphique linéaire de changement des performances de production H5

Explication détaillée de la séparation du développement front-end et back-end de Golang+Nodejs

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn