アップロードしたファイルの文字コード変換方法(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 にアクセス。

コメントを残す