我有一个node.js客户端使用multipart表单将文件上传到在apache tomcat上运行的基于Java的jersey服务器 .
这是node.js上传表单:
var filePath = path.join(os.tmpDir(), filename);
var fstream = fs.createWriteStream(filePath);
file.pipe(fstream);
fstream.on('close', function() {
var formData = {
custom_file: {
value: fs.createReadStream(filePath),
options: {
filename: filename
}
}
};
request.post({
url: apiBase + reqUrl,
headers: options.headers,
formData: formData
}, function (err, resp, body) {
if (err) {
res.status(500).send('Error');
} else {
res.status(200).send(body);
}
});
});
这是泽西服务器多部分资源实现:
@POST
@Path("/upload")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response upload(@FormDataParam("custom_file") InputStream inputStream,
@FormDataParam("custom_file") FormDataContentDisposition fileDetail) {
return null;
}
我还在web.xml中添加了jersey的multipart功能支持:
<init-param>
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>org.glassfish.jersey.media.multipart.MultiPartFeature</param-value>
</init-param>
当我使用这个流时,我的java服务器返回以下异常:
SEVERE: Servlet.service() for servlet [springDispatcher] in context with path [/app] threw exception [org.glassfish.jersey.server.ContainerException: java.lang.StackOverflowError] with root cause
java.lang.StackOverflowError
at com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:95)
at com.google.gson.internal.$Gson$Types$WildcardTypeImpl.<init>($Gson$Types.java:549)
at com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:108)
at com.google.gson.internal.$Gson$Types$ParameterizedTypeImpl.<init>($Gson$Types.java:453)
at com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:99)
at com.google.gson.internal.$Gson$Types$WildcardTypeImpl.<init>($Gson$Types.java:542)
at com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:108)
at com.google.gson.internal.$Gson$Types$WildcardTypeImpl.<init>($Gson$Types.java:549)
at com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:108)
at com.google.gson.internal.$Gson$Types$WildcardTypeImpl.<init>($Gson$Types.java:542)
at com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:108)
at com.google.gson.internal.$Gson$Types$WildcardTypeImpl.<init>($Gson$Types.java:549)
at com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:108)
at com.google.gson.internal.$Gson$Types$WildcardTypeImpl.<init>($Gson$Types.java:542)
at com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:108)
at com.google.gson.internal.$Gson$Types$WildcardTypeImpl.<init>($Gson$Types.java:549)
at com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:108)
at com.google.gson.internal.$Gson$Types$WildcardTypeImpl.<init>($Gson$Types.java:542)
at com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:108)
at com.google.gson.internal.$Gson$Types$WildcardTypeImpl.<init>($Gson$Types.java:549)
at com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:108)
at com.google.gson.internal.$Gson$Types$WildcardTypeImpl.<init>($Gson$Types.java:542)
at com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:108)
at com.google.gson.internal.$Gson$Types$WildcardTypeImpl.<init>($Gson$Types.java:549)
at com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:108)
at com.google.gson.internal.$Gson$Types$WildcardTypeImpl.<init>($Gson$Types.java:542)
at com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:108)
我错过了什么?我跟着request's step by step file upload using form以及mykong's jersey multipart support .
1 回答
您应该在配置中寻找使用GSON软件包的地方,根据我的经验,软件包不稳定,说得最少而且速度慢 .
尝试将其更改为其中一个更好的“ Jackson ”,例如,它可能会解决您的问题 .