サーバーに zip ファイルをアップロードするメソッドを Java ベースのアプリケーションに実装しようとしています。クライアントは Java、サーバーは Java (REST、jboss 7) です。以前は画像ファイルのアップロードに成功していましたが、現在は zip ファイルで問題が発生しており、これらの問題がクライアント関連かサーバー関連 (またはその両方) かが主な疑問です。
だから、私のクライアントはこのように見えます
final HttpHeaders headers = HttpClientUtils.headersJSONAndAcceptJSON();
MultiValueMap<String, Object> requestMap = new LinkedMultiValueMap<String, Object>();
addMap("filename", filename, requestMap);
addMap("contenttype", contentType, requestMap);
addMap("type", type, requestMap);
try {
ByteArrayOutputStream bout = new ByteArrayOutputStream();
int b = -1;
//file data is the inputstream created from the File
while ( (b = filedata.read())>= 0 ) {
bout.write(b);
}
ByteArrayResource rs = new ByteArrayResource( bout.toByteArray() ){
@Override
public String getFilename() {
return "";
}
};
addMap("resource", rs, requestMap);
} catch (IOException e1) {
throw new IllegalStateException("Error");
}
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
headers.setAccept(Arrays.asList(HttpClientUtils.mtypeJSONUtf8()));
final String url = this.baseURL + summaryURL;
try {
ResponseEntity<Summary> rEntity = restTemplate.exchange(
url,
HttpMethod.POST,
HttpClientUtils.entity(headers, requestMap),
Summary.class
(...)
その間、私が持っているサーバー側では
@POST
@Path("/")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces("application/json; charset=UTF-8")
public Summary addImportedSummary(@MultipartForm FileUploadFormObj imp)
{
Summary importedSummary = new Summary();
Map<String , String> newpath = new HashMap<String, String>();
if(imp.getFileData() != null)
{
ZipInputStream zip = new ZipInputStream(imp.getFileData());
ZipEntry entry;
try {
while ((entry = zip.getNextEntry()) != null)
{
if(entry.getName().endsWith(".html") || entry.getName().endsWith(".htm"))
{
if(entry.getSize() > 0)
{
StringWriter writer = new StringWriter();
IOUtils.copy(zip, writer, "UTF-8");
String content = writer.toString();
//do something with the content
}
}
}
zip.close();
} catch (IOException e) {
throw new BadRequestException("Error " + e);
}
}
IOUtils またはその他のリーダーでファイルの内容をコピーしようとすると、問題が発生します。私はいつも例外を受け取ります
ZipException too many length or distance symbols
さて、ファイルがzipであるため、データの送信方法に問題があると思いますが、どこに問題があるのか正確にはわかりません。誰もが同様の問題に遭遇したことがありますか?