如何将文件从Android上传到node.js服务器

我想通过http从android应用程序发送文件到node.js服务器。

但是,当我收到文件的大小是0字节,虽然我可以读取文件的原始名称。

你知道这里出了什么问题吗?

这是Android的一部分:

public class ImageUploader { public static final String HTTP_LOCALHOST_8081_FILE_UPLOAD = "http://192.168.1.104:8081/file_upload"; public void upload(InputStream inputStream, String extension) { AsyncHttpClient asyncHttpClient = new AsyncHttpClient(); RequestParams requestParams = prepareRequestParams(inputStream, extension); asyncHttpClient.post(HTTP_LOCALHOST_8081_FILE_UPLOAD, requestParams, new AsyncHttpResponseHandler() { @Override public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) { } @Override public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) { error.printStackTrace(); } }); } private RequestParams prepareRequestParams(InputStream inputStream, String extension) { RequestParams requestParams = new RequestParams(); requestParams.put("image", inputStream, "image." + extension, "image/jpeg"); return requestParams; }} 

这里是node.js部分:

 var express = require('express') var multer = require('multer') var app = express() var path = require('path') var uploading = require('./uploading/uploading.js') var storage = multer.diskStorage({ destination: function(req, file, cb) { cb(null, 'uploads/') }, filename: function(req, file, cb) { cb(null, file.fieldname + '_' + Date.now() + path.extname(file.originalname)) } }) var upload = multer({ storage: storage }) app.use(express.static('public')); app.post('/file_upload', upload.single('image'), function(req, res) { //uploading.openIrfanView(__dirname, req.file.filename) res.sendStatus(200); }) var server = app.listen(8081, function() {}) 

我的猜测是,无论是java inputStream不适合HTTP multipart请求,或者我需要使用一些特殊的节点库来读取什么是发送。

好吧,我知道了。

这是我第一次偶然发现的东西 – 这是从inputstream中读取清空它

我从Uri获得inputStream ,然后第一次从设备的屏幕上读取它,然后第二次将它传递给ImageUploader ,那时inputStream已经是空的了。

我可能应该把这段代码粘贴到这个问题上。