アップロードしたファ​イルの文字コード変換​方法(SJISからUTF8)

Java

アップロードしたファ​イルの文字コード変換​方法(SJISからUTF8)

WebアプリケーションでShift-JISのファイルをアップロードして内部でUTF-8に変換して出力するサンプルを作ってみた。

あくまで参考程度でお願いいたします。
簡単に動作確認まで実施してます。

必要なライブラリ
commons-fileupload-1.3-bin.zip
commons-io-2.4-bin.zip

動的コンテンツで作成。

UploadFileServlet.java
[java]

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Iterator;
import java.util.List;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class UploadFileServlet extends HttpServlet {

private String outPutPath = "C:/tmp/output.txt";
private String redirectPage = "upload.html";

private String inEncoding = "MS932";
private String outEncoding = "UTF-8";

/**
* 文字コード変換して書き込む例
*/
public void doPost(HttpServletRequest req,
HttpServletResponse res) throws IOException {

// Shift_JISのファイルから文字コード変換して書き込む例

DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);

factory.setSizeThreshold(1024);
upload.setSizeMax(-1);
upload.setHeaderEncoding(inEncoding);

InputStreamReader in = null;

OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(outPutPath), outEncoding);

try {
List<FileItem> list = upload.parseRequest(req);

Iterator<FileItem> iterator = list.iterator();
while (iterator.hasNext()) {
FileItem fItem = iterator.next();

if (!(fItem.isFormField())) {

String fileName = fItem.getName();
if ((fileName != null) && (!fileName.equals(""))) {
in = new InputStreamReader(fItem.getInputStream(), inEncoding);
int cbuf;
while ((cbuf = in.read()) > -1) {
System.out.println(cbuf);
out.write(cbuf);
}
out.flush();
}
}
}
} catch (FileUploadException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (out != null) {
try {
out.close();
} catch (IOException e) {
// ignore
}
}
if (in != null) {
try {
in.close();
} catch (IOException e) {
// ignore
}
}
}
res.sendRedirect(redirectPage);
}
}
[/java]

upload.html
[html]
<html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<body>
<form method="POST" enctype="multipart/form-data" action="upload">
ファイルアップロード1: <input type="file" name="upfile1"><br/>
ファイルアップロード2: <input type="file" name="upfile2"><br/>
<input type="submit" value="アップロード"> アップロードのテスト
</form>
</body>
</html>
[/html]

web.xml
[xml]
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebTest" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<display-name>WebTest</display-name>
<servlet>
<servlet-name>upload</servlet-name>
<servlet-class>UploadFileServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>upload</servlet-name>
<url-pattern>/upload</url-pattern>
</servlet-mapping>
</web-app>
[/xml]

WEB-INFのlibの配下に
commons-fileupload-1.3-bin.zip
commons-io-2.4-bin.zip
配置して。

後のめんどい設定周りは適当にして。

デプロイして、サーバー起動して
http://localhost:8080/WebTest/upload.html にアクセス。

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください