如何将文件从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
已经是空的了。
我可能应该把这段代码粘贴到这个问题上。