Ich versuche ein Bild von einer Android-Anwendung mit einem benutzerdefinierten MultipartEntity
hochladen, die auch eine ProgressDialog
aktualisiert (das ist auch mein Grund für die Verwendung der veralteten MultipartEntity
) .
Relevante Java-Code:Bild mit Java MultipartEntity auf Node.js Server mit Express und Multer hochladen
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 Server-Datei:
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...');
ich auch die upload.single()
Ansatz versucht haben (die durch das Formular funktioniert), aber das erfordert den Namen des Feldes Ich bin mir nicht sicher, wie/wenn ich das Java-Multipart-Entity-Objekt hinzufügen kann.
Was ich zur Zeit immer wird eine leere files
Array auf Antrag und eine source
Variable auf Antrag body
enthalten, was, wie die Rohdaten des Bildes scheint, so dass im Grunde sieht es aus wie multer nicht überhaupt etwas zu tun . Was vermisse ich?
Vielen Dank!
Danke, @Vlad. Alles funktioniert! Ich habe nur eine Frage: Wenn Sie dies auf localhost testen, speichert der Server 2 Dateien mit der gleichen Größe; Wie kann ich die temporäre Datei entfernen und nur die endgültige Datei verlassen? – Minoru