node.js - 用于处理来自phonegap ft.upload 的传入请求的node.js 服务器端代码是什么?

标签 node.js cordova image-uploading

我已经部分开发了一个混合 Android 应用程序,使用 node.js 作为我的服务器,并使用 javascript、jquery、phonegap(现在称为 cordova 1.6.0)作为该应用程序。

该应用程序的一部分允许用户使用智能手机相机拍照,然后将其上传到服务器。

我在上传图像的应用程序中的代码是...

    var imageURI = document.getElementById('display_image').src;
    if (!imageURI) { // || (self.elem.image_play.style.display == "none")) {
        console.log('no image uri defined - ' + JSON.stringify(imageURI));
        //document.getElementById('camera_status').innerHTML = "Take picture or select picture from library first.";
        return;
    }

    // Verify server has been entered
    server = 'http://192.168.1.3:8180/newimage/';
    if (server) {
        console.log("starting upload");
        // Specify transfer options
        var options = new FileUploadOptions();
        options.fileKey="file";
        options.fileName=imageURI.substr(imageURI.lastIndexOf('/')+1);
        options.mimeType="image/jpg";
        options.chunkedMode = false;

        // Transfer picture to server
        var ft = new FileTransfer();
        ft.upload(imageURI, server, function(r) {
            console.log("upload successful"+r.bytesSent+" bytes uploaded.");
            //document.getElementById('camera_status').innerHTML = "Upload successful: "+r.bytesSent+" bytes uploaded.";
        }, function(error) {
            console.log("upload failed - Error Code = "+error.code);
            //document.getElementById('camera_status').innerHTML = "Upload failed: Code = "+error.code;
        }, options);
    }

这工作正常,但我不知道如何处理 node.js 服务器上的图像。目前我的代码是:

'/newimage/': function(req,res){

    var chunks;

    req.addListener('data', function (chunk) {
        console.log('in data processing');
        chunks.push(chunk);
    });

    req.addListener('end', function () {
        console.log('completing data processing');
        fs.writeFile("out.jpg", chunks, function(err) {
            console.log(err);
        });
    });
}

此服务器方法执行,但 console.log 行均不执行。

我已经尝试了两天来解决这个问题,并且尝试了很多不同的方法,但我不知道如何处理从phonegap ft.upload 方法传入的图像文件。有人可以帮忙吗?

一旦我完成了这个排序,我的最终目标是将图像文件上传到亚马逊 s3 存储,我想我可以使用 knox 模块。

最佳答案

我正在使用node formidable和fs模块将上传的图像写入nodejs服务器上的/tmp文件夹,以便稍后进行OCR。代码基于 www.nodebeginner.org 中的图像上传示例书。

我在phonegap项目中的uploadPicture()方法中的JS代码:

 // Specify transfer options
        var options = new FileUploadOptions();
        options.fileKey="file";
        options.fileName=imageURI.substr(imageURI.lastIndexOf('/')+1);
        options.mimeType="image/jpeg"
        options.chunkedMode = false;

        // Transfer picture to server
        var ft = new FileTransfer();
        ft.upload(imageURI, server, function(r) {
            document.getElementById('camera_status').innerHTML = "Upload successful: "+r.bytesSent+" bytes uploaded.";              
        }, function(error) {
            document.getElementById('camera_status').innerHTML = "Upload failed: Code = "+error.code;               
        }, options, true);

我在 Node 服务器上的 requesthandler.js 中的代码:

function upload(response, request) {
    console.log("Request handler 'upload' was called.");
    var form = new formidable.IncomingForm();
    form.parse(request, function(error, fields, files) {

        //logs the file information 
        console.log(JSON.stringify(files))

        fs.rename(files.file.path, "/tmp/test.png", function(err) {
            if (err) {
                fs.unlink("/tmp/test.png");
                fs.rename(files.file.path, "/tmp/test.png");
            }
        });
        response.writeHead(200, {"Content-Type": "text/html"});
        response.write("received image:<br/>");
        response.write("<img src='/show' />");
        response.end();
    });
}

关于node.js - 用于处理来自phonegap ft.upload 的传入请求的node.js 服务器端代码是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10474415/

相关文章:

ios - 当用户拒绝访问 iOS 中的相机时,Cordova 相机插件显示黑屏

php - 调整大小和拇指功能有效,上传多个文件时除外

php - 如何将 PHP 照片上传/图像转换为 PHP 视频上传/视频?

node.js - 如何在 Node.js 和 Mongoose 中在一段时间后更新用户?

javascript - 从外部静态 JSON 文件检索数据并在 AWS Lambda 中使用

javascript - 为什么只有在集合不存在时 MongoDB 才插入记录的速度较慢?

mysql - 在我的 Mac 上安装了 MySQL,它删除了全局 npm、gulp 等。保存 npm 的步骤?

ios - 由于权利文件或配置文件存在问题,无法构建 Ionic/Cordova iOS

javascript - Sencha Touch 将基本身份验证注入(inject)所有请求

android - 使用okhttp上传图片到服务器