Javaの道 Javaに関する
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道 >  掲示板 >  掲示板(SAStruts&jQuery.uploadのサーバ側ロジック)
閲覧数:1841
掲示板(SAStruts&jQuery.uploadのサーバ側ロジック)
名前
匿名
題名 SAStruts&jQuery.uploadのサーバ側ロジック
質問内容

質問を評価する
(0ポイント)
Ajaxでのファイルアップロード(jQuery.uploadプラグイン)を試みているのですが、requestオブジェクトからFileのパラメータを取得するにはどのようにするのでしょうか?

request.getParameter()では、String変換され、FormFileはセキュリティ上取得できないとWEB上でコメントを見ました。

ただ、PHPでは普通にできているようで、SAStrutsでもできないか模索しております。

お分かりになりましたら、よろしくお願いします。

●JSP
<script src="/sample/js/jquery-1.8.2.min.js"></script>
<script src="/sample/js/jquery.upload-1.0.2.js"></script>
...
<form name='apItemForm'>
 <input type='text' name=itemid>
  <input type='file' id='apItemFile' />
  <button type='button' class='btn btn-primary' onclick='apItemMntFile();'>UP</button>
</form>
...
function apItemMntFile(){
    $('#apItemFile').upload("/sample/ajax/itemUpload", apItemMntFileComp, 'json');
}
function apItemMntFileComp(ele){
alert(ele);
}

●Java(AjaxAction)
@Execute(validator = false)
public String itemUpload() throws IOException {
    String itemid =request.getParameter("itemid");
    FormFile file = request.g("apItemFile");←@@ここ!

    String result = "false";
    try {
        itemMstService.itemFileUp(itemid, file);
        result = "true";
    } catch (Exception e) {
        e.printStackTrace();
    }

    this.response.setContentType("text/javascript");
    this.response.setCharacterEncoding("utf-8");
    this.response.getWriter().write(JSON.encode(result));
    return null;
}
質問日時 2013-04-02 14:28:51
名前
匿名
回答内容

回答を評価する
(0ポイント)
質問者です。

BASE64で画像を変換して普通にPOSTする方法はどうでしょうか?
HTML5のCanvasとかは使いたくないですが。。
回答日時 2013-04-02 16:33:24
名前
匿名
回答内容

回答を評価する
(0ポイント)
javascriptだけで画像(ローカルファイル)をBASE64変換に変換したいのですが、難しそうです。

これもだめでした。
var b64 = $.base64.encode(document.itemForm.itemFile)

HTML5にしてもFileReaderはIEは10からでないと対応していないようで・・

どんどんはまってきているような・・。。
やっぱりSAStrutsではsubmitしなければいけないのでしょうか。。
回答日時 2013-04-02 18:08:20
名前
匿名
回答内容

回答を評価する
(0ポイント)
formのtargetを見えないframeにすれば、submitしても画面消
えないでしょ。
遷移なしのアップロードは大抵こうしてると思う。

そもそも、ファイルアップロードは「ファイルの内容を
base64にしたもの」じゃないよ。
ちゃんと形式があるし、content-typeも違う。
回答日時 2013-04-02 20:41:10
名前
匿名
回答内容

回答を評価する
(0ポイント)
ありがとうございます。

jQuery.upload.jsのライブラリを見る限り、内部的にそのようにしていますね。

ただ、サーバ側の処理でrequestからファイルデータを取り出す所がうまく行きません。

PHPでは取り出せてJavaでは取り出せないのもこのI/Fの部分だと思っています。
moshiku,
jQueryのAjax実行時のパラメータが悪いのか・・。
Servletで実行しても取れませんでした。

BASE64に変換する事で、ファイルのバイナリデータではなく、単なる文字列ですからね。
ブラウザ差異による動作不可もなくなると思っているのですが、そもそもFileReaderで無いとローカルファイルにアクセスできない現象に当たっています。

IFRAMEのSUBMITでごまかしたやり方が良いですね。。
回答日時 2013-04-02 21:02:28
名前
匿名
回答内容

回答を評価する
(0ポイント)
えーと。
その場合のリクエストはAjaxじゃないんだけど。
回答日時 2013-04-02 23:35:19
名前
匿名
回答内容

回答を評価する
(0ポイント)
つ ml.seasar.org

日本語よめないわけじゃないよね?
日本人のSeasar 開発者がいると聞きづらいの?
回答日時 2013-04-03 15:14:00

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。



このページのトップへ
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道_CopyrightJavaの道