ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

使用express和multer将带有Java MultipartEntity的映像上传到Node.js服务器

2019-08-29 06:26:26  阅读:242  来源: 互联网

标签:android multer java node-js express


我正在尝试使用自定义MultipartEntity从Android应用程序上传图像,该自定义MultipartEntity也会更新ProgressDialog(这也是我使用已弃用的MultipartEntity的原因).
相关的Java代码:

        File file = new File(imgPath);

        HttpPost post = new HttpPost("http://" + SERVER + "/upload");

        MultipartEntity entity = new MyMultipartEntity(new MyMultipartEntity.ProgressListener()
        {
            public void transferred(long num)
            {
                publishProgress((int) ((num / (float) totalSize) * 100));
                Log.d("DEBUG", num + " - " + totalSize);
            }
        });
        ContentBody cbFile = new FileBody(file, "image/jpeg");
        entity.addPart("source", cbFile);

        totalSize = entity.getContentLength();

        post.setEntity(entity);

        HttpResponse response = client.execute(post);
        int statusCode = response.getStatusLine().getStatusCode();

        if(statusCode == HttpStatus.SC_OK){
            String fullRes = EntityUtils.toString(response.getEntity());
            Log.d("DEBUG", fullRes);

        } else {
            Log.d("DEBUG", "HTTP Fail, Response Code: " + statusCode);
        }

Node.js服务器文件:

var fs = require('fs');

var express = require('express');
var app = express();

var multer = require('multer');
var upload = multer(
    { 
        limits: {
            fieldNameSize: 999999999,
            fieldSize: 999999999
        },
        dest: 'uploads/' }
    );

app.get('/', function(req, res){
    res.send(
        '<form action="/upload" method="post" enctype="multipart/form-data">'+
        '<input type="file" name="source">'+
        '<input type="submit" value="Upload">'+
        '</form>'
    );
});

app.post('/upload', upload.any(), function(req, res){

    console.log(req.files);

    var tmp_path = req.files[0].path;

    var target_path = 'uploads/' + req.files[0].originalname;

    var src = fs.createReadStream(tmp_path);
    var dest = fs.createWriteStream(target_path);
    src.pipe(dest);
    src.on('end', function() { res.send("ok"); });
    src.on('error', function(err) { res.send({error: "upload failed"}); });
});

app.get('/info', function(req, res){
    console.log(__dirname);
    res.send("image upload server: post /upload");
});

app.listen(8080);
console.log('started server on localhost...');

我也尝试使用upload.single()方法(通过表单工作),但这需要字段的名称,我不知道如何/如果我可以添加到Java多部分实体对象.

我目前得到的是请求上的空文件数组和请求体上的源变量,其中包含看起来像图像的原始数据,所以基本上看起来multer根本没有做任何事情.我错过了什么?

谢谢!

解决方法:

我最终使用了Android Ion库 – https://github.com/koush/ion

Java代码:

Ion.with(context)
            .load("http://" + SERVER + ":8080/upload")
            .progressDialog(pd)
            .setMultipartParameter("name", "source")
            .setMultipartFile("image", "image/jpeg", new File(imgPath))
            .asJsonObject()
            .setCallback(new FutureCallback<JsonObject>() {
                @Override
                public void onCompleted(Exception e, JsonObject result) {

                    //do stuff with result
                }
            });

服务器代码保持不变.

标签:android,multer,java,node-js,express
来源: https://codeday.me/bug/20190829/1758065.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有