質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.48%

  • JavaScript

    17040questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • Java

    14126questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • jQuery

    6936questions

    jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

  • Ajax

    1117questions

    Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

  • servlet

    477questions

    Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

ajaxからservletにファイルアップロードすると日本語が文字化けする

受付中

回答 0

投稿

  • 評価
  • クリップ 1
  • VIEW 537

uer03108

score 93

ajaxでservletに日本語のファイルをアップロードすると「ファイル名」が文字化けします。

一応、一般的な下記のアップロードサンプルでeclipseのtomcat9上では問題なく動作しておりました。
しかし、warファイルを作成してeclipseを介さずtomcat9上で動作させるとファイル名が文字化けしました。
最初はtomcatの設定の問題なのだと思ましたが、日本語の文字列送信は問題ありません。

正直、どこが問題なのか分からなくなっております。
どなたか原因が分かる方はいらっしゃるでしょうか。

日本語の文字列送信(問題なし)

  var sendParam = function(){

    //ajax通信
    $.ajax({
      type        : "GET",
      url         : "urlSendParam",
      data        : {param : "日本語"},
      async       : false,
      contentType : "application/x-www-form-urlencoded; charset=UTF-8",  //←これを追記で文字化け回避
      success     : function(data) {
        console.log(data);
      },
      error       : function(XMLHttpRequest, textStatus, errorThrown) {
        alert("リクエスト時になんらかのエラーが発生しました\n" + url + "\n" + textStatus +":\n" + errorThrown);
      }
    });

  }

ファイルアップロード

  var uploadFile = function(){

    //フォームデータ
    var form = new FormData();

    //ファイルオブジェクト追加
    form.append('file', $("#idFile").files[0]);  //ファイルオブジェクトなのでエンコードできない

    //ajax通信
    $.ajax({
      type        : "POST",
      url         : "urlUploadFile",
      data        : formData,
      async       : false, 
      cache       : false,
      contentType : false,  //false固定
      processData : false,
      dataType    : "html",
      success : function(data) {
        console.log(data);
      },
      error : function(XMLHttpRequest, textStatus, errorThrown) {
        alert("リクエスト時になんらかのエラーが発生しました:" + textStatus +":\n" + errorThrown);
      }
    });
  }

ファイル受け取り側 ←ファイル名文字化け

@WebServlet(urlPatterns={"/urlUploadFile"})
@MultipartConfig(location="/", maxFileSize=1024 * 1024 * 100)
public class SvUploadFile extends HttpServlet {

    private static final long serialVersionUID = 1L;

    @Override
    public void doPost (HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException {

        //パート取得
        Part part = req.getPart("file");

        //ファイル名取得
        String name = this.getFileName(part);  //文字化け

        //ファイル書き込み
        part.write("./" + name);
    }

    //ファイル名取得
    private String getFileName(Part part) {
        String name = null;
        for (String dispotion : part.getHeader("Content-Disposition").split(";")) {
            if (dispotion.trim().startsWith("filename")) {
                name = dispotion.substring(dispotion.indexOf("=") + 1).replace("\"", "").trim();
                name = name.substring(name.lastIndexOf("\\") + 1);
                break;
            }
        }
        return name;
    }

}

tomcatのserver.xml

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               useBodyEncodingForURI="true" />


    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" useBodyEncodingForURI="true" />
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • CHERRY

    2018/06/13 07:41

    文字化けとは、どのような文字が、どのような文字になるのでしょうか?

    キャンセル

まだ回答がついていません

関連した質問

  • 解決済

    Servlet でのログイン処理について

    Servletにて、ログイン画面を作成しておりますが、 うまくできません。 どこを修正するべきか、教えていただけないでしょうか? ORACLEのデータベースの表一覧に一致

  • 受付中

    (ch=input.read()) != -1とcontent-lengthが必要な理由

    ただいま、tomcatがブラウザからのpostを受けとる時に通るコードで、分からないところがありました。 僕は、input.read()=-1でブラウザからのリクエストの終了

  • 解決済

    jQueryのajaxのPOST通信ができません

    前提・実現したいこと こんにちは。 js初心者です。 node.jsとの通信で、ajaxを使った通信をしているのですが、うまくいきません。 仮想マシンを使っており、 OS

  • 解決済

    htmlが更新されずチェックボックスが残る

    前提・実現したいこと アップロードした画像を削除する機能を作っています。 画像はimgフォルダの画像が参照され画像の数だけチェックボックスと画像が表示されます。 チェックしたあとに

  • 解決済

    画像・動画を削除する処理が完了したら更新したい

    前提・実現したいこと html javascript phpで画像や動画を削除する機能を作っています promiseで画像・動画を削除する処理(ajaxで画像のソース(相対パス

  • 解決済

    PHPで画面遷移が遅い

    PHP+JAVASCRIPTでプログラムを書いていますが 画面の遷移が遅くて困っています。 テキストボックスに入力した値を、JAVASCRIPTで拾い JAVASCRIPTから

  • 解決済

    javascript  ajaxの返り値をvarで宣言したい

    やりたいこと var last_id = getId()の帰り値を代入したい。   画面ロード時にlast_idにgetId()をよ呼び出し、返り値の1を代入しようとしたのですが

  • 解決済

    tomcatでクライアント証明書を有効にさせる方法について

    ・環境 OS:Windows2016 Apache Tomcat/7.0.85 tomcatを使用したWebサイトを構築しておりますが、クライアント証明書要求を有効に させる設

同じタグがついた質問を見る

  • JavaScript

    17040questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • Java

    14126questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • jQuery

    6936questions

    jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

  • Ajax

    1117questions

    Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

  • servlet

    477questions

    Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。