はじめまして.鷲見と申します.
現在,PlayFramework2.5+Java+組み込みNettyサーバ でブラウザから画像といくつかの文字列をサーバに送り,
画像をアスキーアートに変換して返すということをしているのですが,
画像と,アスキーアートへの変換の設定を示す文字列が送信されてからサーバに届くまでに20秒ほどかかってしまいます.
画像のみをサーバへ送る場合には0.5秒もかからずデータを送信できています.
アドバイスをいただければ幸いです.
ソースは以下のようになっています
public Result aaConvert(){
MultipartFormData.FilePart picture=request().body().asMultipartFormData().getFile("picture");
Map<String,String[]> form= request().body(). asMultipartFormData().asFormUrlEncoded();
if(picture!=null){
File file = (File)picture.getFile();
try {
String aa = ConvertionUtil.aaConvertion(file,form);
ObjectNode result= Json.newObject();
result.put("aa",aa);
return ok(result);
}catch (IOException e) {
return badRequest("invalid request");
}
}
return badRequest("picture is null");
}
id=picture以外のnameを消すと送信がすぐに完了します.
<form id="settingForm" method="post" action="">
<div class="row">
<div class="col-md-3">
<label class="control-label">Select File</label>
<input id="input-20" type="file" name="picture" class="file-loading">
</div>
<div class="col-md-9">
<div class="form-group">
<label for="select">画像サイズ</label>
<select class="form-control" id="sel1" name="sel1">
<option value="NORESIZE">変更しない</option>
<option value="RESIZE1">640x480</option>
<option value="RESIZE2">800x600</option>
<option value="RESIZE3">960x640</option>
<option value="RESIZE4">1024x768</option>
<option value="RESIZE5">1280x960</option>
<option value="RESIZE6">1920x1080</option>
</select>
<b>輪郭抽出精度 </b>
<input id="slider" name="slider" type="text" data-slider-min="1" data-slider-max="100" data-slider-step="1" data-slider-value="50"/>
<span id="sliderText">Current Slider Value: <span id="sliderVal">50</span></span>
<div class="form-group">
<label for="select">抽出比較範囲</label>
<select class="form-control" id="sel2" name="sel2">
<option value="3">3x3</option>
<option value="5">5x5</option>
<option value="7">7x7</option>
<option value="9">9x9</option>
</select>
</div>
<b>フォント</b>
<label class="radio-inline"><input type="radio" id="radio1" name="font" checked="checked" value="monospaced" >Monospaced</label>
<label class="radio-inline"><input type="radio" id="radio2" name="font" value="proportional">Proportional</label>
<div class="checkbox">
<b>トーン処理</b>
<label><input type="checkbox" name="tone" value="true">トーン処理を行う</label>
</div>
</div>
</div>
</div>
<buttun id="submit" class="btn btn-primary">変換</buttun>
</form>
var endpoint='/';
$(function() {
$("#submit").on('click', function(evt) {
if(!window.FormData)
alert("InternetExproler9以前には対応していません");
if(!$("#input-20")[0].files[0])
alert("ファイルを選択してください");
var form = $("#settingForm").get()[0];
var formData = new FormData(form);
$.ajax({
url: endpoint,
method: 'post',
dataType: 'json',
data: formData,
processData: false,
contentType: false
}).done(function (data) {
console.log('SUCCESS', data);
editor.setValue(data.aa);
}).fail(function (jqXHR, textStatus, errorThrown) {
console.log('ERROR', jqXHR, textStatus, errorThrown);
});
return false;
});
});