这是我的Java代码,用于将文件上传到Node.js服务器。
import java.io.File;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpVersion;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.ContentBody;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.CoreProtocolPNames;
import org.apache.http.util.EntityUtils;
public class PostFile {
public static void main(String[] args) throws Exception {
HttpClient httpclient = new DefaultHttpClient();
httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
HttpPost httppost = new HttpPost("http://127.0.0.1/upload");
File file = new File("/Users/KHC/test.txt");
MultipartEntity mpEntity = new MultipartEntity();
ContentBody cbFile = new FileBody(file);
mpEntity.addPart("userfile", cbFile);
httppost.setEntity(mpEntity);
System.out.println("executing request " + httppost.getRequestLine());
HttpResponse response = httpclient.execute(httppost);
HttpEntity resEntity = response.getEntity();
System.out.println(response.getStatusLine());
if (resEntity != null) {
System.out.println(EntityUtils.toString(resEntity));
}if (resEntity != null) {
resEntity.consumeContent();
}
httpclient.getConnectionManager().shutdown();
}
}
这是Node.js代码。我在Node.js服务器上使用express框架。
var fs = require('fs');
module.exports = function(app) {
app.get('/',function(req,res){
res.end("Node-File-Upload");
});
app.post('/upload', function(req, res) {
console.log(req.files);
//console.log(req.files.userfile.originalFilename);
//console.log(req.files.userfile.path);
fs.readFile(req.files.userfile.path, function (err, data){
var dirname = "/workspace/museek-server";
var newPath = dirname + "/uploads/" + req.files.image.originalFilename;
fs.writeFile(newPath, data, function (err) {
if(err){
res.json({'response':"Error"});
}else {
res.json({'response':"Saved"});
}
});
});
});
};
当我执行Java代码时,Node.js服务器无法读取req.files,因为req.files未定义。我认为还有另一种方法可以读取多部分文件,但我无法在Internet上找到它。谁能帮我这个?
答案 0 :(得分:0)
req.files
。
在Express 4中,默认情况下req.files在req对象上不再可用。要访问req.files对象上的上传文件,请使用多部分处理中间件,如busboy,multer,formidable,multiparty,connect-multiparty或pez。
您可以替换NodeJS代码以使用busboy作为解析器。
可能你的最终解决方案会这样结束:
var express = require('express');
var app = express();
var Busboy = require('busboy'),
path = require('path'),
fs = require('fs');
app.post('/upload', function(req, res) {
var busboy = new Busboy({ headers : req.headers });
busboy.on('file', function(fieldname, file, filename, encoding, mimetype) {
var dirname = "/workspace/museek-server";
var newPath = dirname + "/uploads/";
var saveTo = path.join(newPath, path.basename(fieldname));
file.pipe(fs.createWriteStream(saveTo));
});
busboy.on('finish', function() {
res.writeHead(200, { 'Response': 'Saved' });
res.end("That's all folks!");
});
return req.pipe(busboy);
});