jQuery Uploadify + Apache Fileupload 非同期ファイルアップロードの例
1. アップロードされるファイルのサイズと種類を制限できます。理論的には、あらゆる種類のファイルをアップロードできます (API に従って構成できます)。
2. Apache commons-fileupload-1.3.1.jar は、バックグラウンドでアップロード ツールキットとして使用されます。この例では、一度に複数のファイルをアップロードできます。
3. ファイルのアップロード ディレクトリは任意に指定できます。web.xml で構成してください。
Uploadify API の詳細については、http://www.uploadify.com/documentation/ を参照してください。
ファイルアップロードサーブレット
次のようにコードをコピーします。
パッケージcom.xiaoxing.upload;
java.io.ファイルをインポートします。
インポート java.io.IOException;
java.io.PrintWriterをインポートします。
java.io.UnsupportedEncodingExceptionをインポートします。
インポート java.text.SimpleDateFormat;
java.util.Dateをインポートします。
java.util.Iteratorをインポートします。
java.util.Listをインポートします。
java.util.UUIDをインポートします。
インポート javax.servlet.ServletException;
インポート javax.servlet.http.HttpServlet;
インポート javax.servlet.http.HttpServletRequest;
インポート javax.servlet.http.HttpServletResponse;
org.apache.commons.fileupload.FileItem をインポートします。
org.apache.commons.fileupload.disk.DiskFileItemFactory をインポートします。
インポート org.apache.commons.fileupload.servlet.ServletFileUpload;
/**
* <h1>Apache Fileupload ファイルのアップロード (2014-5-3)</h1>
* <p>1. この例に興味があり、さらに詳しく知りたい場合は、Java Private School オンライン学習コミュニティ (329232140) に参加してください。</p>
* <p>2. この例は、少し変更を加えるだけで実際のプロジェクトに移植できます。 </p>
*/
public class FileUploadServlet extends HttpServlet {
プライベート静的最終ロングserialVersionUID = 7579265950932321867L;
// デフォルトのファイル アップロード ディレクトリを設定します (web.xml で設定していない場合)
private String UploadDir = "c:/";
private String tempUploadDir = "c:/"; // ファイルが一時的に保存されるディレクトリ (セッションが破棄された後、リスナーによって自動的に削除されます)
/*
* (Javadoc 以外)
* @javax.servlet.GenericServlet#init() を参照
* ファイルのアップロード ディレクトリが web.xml に設定されている場合、最初にそれが使用され、ファイル ディレクトリが存在するかどうかが判断されます。存在しない場合は作成します。
*/
@オーバーライド
public void init() は ServletException をスローします {
// このプロジェクトが存在する実際のハードディスク ディレクトリを取得します
文字列パス = getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
path = path.substring(0, path.indexOf("WEB-INF"));
// ターゲットが存在するかどうかを判断し、存在しない場合は作成します
String UploadDir = path.concat(this.getInitParameter("uploadDir"));
String tempUploadDir = path.concat(this.getInitParameter("tempUploadDir"));
ファイル f_uploadDir = 新しいファイル(uploadDir);
ファイル f_tempUploadDir = 新しいファイル(tempUploadDir);
if (!f_uploadDir.exists()) {
f_uploadDir.mkdirs();
}
if (!f_tempUploadDir.exists()) {
f_tempUploadDir.mkdirs();
}
//変数に値を代入
this.uploadDir = アップロードディレクトリ;
this.tempUploadDir = tempUploadDir;
}
/*
* (Javadoc 以外)
* @javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)を参照してください。
※getメソッドで送信されたデータは受け付けず、アップロード失敗ステータスコードを返します。
*/
@オーバーライド
protected void doGet(HttpServletRequest リクエスト、HttpServletResponse レスポンス) throws ServletException、IOException {
this.setResponse(応答);
PrintWriter 出力 = 応答.getWriter();
out.print("{/"error/":/"-1/""); // 不正な送信方法です
}
/*
* (Javadoc 以外)
* @javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)を参照してください。
* ファイルのアップロード リクエストは通常、POST 経由で送信されます
*/
@オーバーライド
protected void doPost(HttpServletRequest リクエスト、HttpServletResponse レスポンス) throws ServletException、IOException {
this.setResponse(response); // フロントエンド解析の応答タイプを設定します。
PrintWriter 出力 = 応答.getWriter();
文字列結果 = "";
試す {
// これがファイルのアップロードリクエストであるかどうかを確認します
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (isMultipart) {
DiskFileItemFactory Factory = new DiskFileItemFactory() // ファクトリ ディスクベースのファイル アイテムを作成します。
Factory.setRepository(new File(tempUploadDir)); // リポジトリを設定します (安全な一時的な場所を確保する場合)
ServletFileUpload Upload = new ServletFileUpload(factory) // 新しいファイル アップロード ハンドラーを作成します。
Upload.setSizeMax(1024 * 1024 * 100); // 全体の必要なサイズ制限を設定します (フロントエンドとバックエンドで異なるプラグインが使用されるため、フロントエンドとバックエンドを別々に設定することをお勧めします)
List<FileItem> items = Upload.parseRequest(request); // リクエストを解析します。
Iterator<FileItem> iter = items.iterator() // アップロードされたアイテムを処理します。
while (iter.hasNext()) { //一度に複数のファイルをアップロードした場合、ここに個別に保存されます。
FileItem item = iter.next();
if (!item.isFormField()) { // フォーム内のファイルタイプ以外のフィールドをフィルタリングします
if (!"".equals(item.getName())) { // 非ファイルタイプの入力をフィルターします
String s_name = item.getName() // 元のファイル名を取得します。
int 位置 = s_name.lastIndexOf(".");
String s_fileType = s_name.substring(position, s_name.length()); // ファイルのサフィックスを取得します。
文字列日付 = new SimpleDateFormat("yyyyMMdd").format(new Date());
文字列 s = UploadDir.concat("/").concat(日付).concat("/");
//ここで日付ごとにファイルをディレクトリに保存します
ファイル sf = 新しいファイル;
if (!sf.exists()) {
sf.mkdirs();
}
String s_filePath = s.concat(UUID.randomUUID().toString()).concat(s_fileType);
ファイルパス = 新しいファイル(s_filePath);
item.write(パス);
結果 += s_filePath.concat(",");
} それ以外 {
結果 = "";
壊す;
}
}
}
} それ以外 {
結果 = "";
}
String s_resultJSON = this.jointJSON(result); // スプライシングによりフロントエンド JSON が返されます。
out.print(s_resultJSON);
} catch (例外 e) {
e.printStackTrace();
} ついに {
out.flush();
out.close();
}
}
/**
* JSON を結合し、保存されたファイルのファイル名と日付ディレクトリをフロントエンドに返します (フロントエンドは、データベースへのファイル パスの保存など、他のフォーム操作を完了するためにこのパスを必要とする場合があります)。
* @param 結果の JSON 形式の文字列
* @戻る
* @throws UnsupportedEncodingException
*/
private String JointJSON (String result) throws UnsupportedEncodingException {
文字列 str = "";
if(!"".equals(result)) {
文字列 rs[] = result.split(",");
StringBuffer バッファ = new StringBuffer("{/"rows/":[");
for (int i = 0; i < rs.length; i++) {
文字列 s_tmpName = rs[i];
s_tmpName = s_tmpName.substring(uploadDir.length(), s_tmpName.length());
buffer.append("{/"name/":/"").append(s_tmpName).append("/"},");
}
str = バッファ.toString();
str = str.substring(0, str.length() - 1).concat("]}");
} それ以外 {
str = "{/"error/":/"-2/"" //アップロードに失敗しました。
}
文字列を返します。
}
/**
* 応答タイプ ContentType を「application/x-json」に設定します
* @param レスポンス
*/
private void setResponse(HttpServletResponse 応答) {
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json;charset=UTF-8");
response.setHeader("キャッシュ制御", "キャッシュなし");
}
}
test_upload.html
次のようにコードをコピーします。
<!DOCTYPE html>
<html>
<頭>
<meta charset="UTF-8">
<title>jQuery Uploadify + Apache Fileupload の非同期ファイル アップロードの例 (2014-5-3)</title>
<link rel="stylesheet" type="text/css" href="/js/uploadify/uploadify.css">
<script src="/js/jquery-1.9.0.js"></script>
<script src="/js/uploadify/jquery.uploadify.min.js"></script>
<script type="text/javascript">
$(関数() {
$('#fileupload').uploadify({
'メソッド' : 'ポスト',
'buttonText' : 'フラッシュアップロードファイル',
'ファイルサイズ制限' : '1024KB',
'fileTypeExts' : '*.gif; *.jpg';
'swf' : '/js/uploadify/uploadify.swf',
'uploader' : '/upload', //これは画像をアップロードするパスであり、web.xml で構成したサーブレットです
'onUploadSuccess' : function(file, data, response) { //画像が正常にアップロードされた後に返されたデータはここで処理されます
var ary = eval("(" + データ + ")").rows;
for(var i = 0; i < ary.length; i++) {
$("#J_div").append("<img alt='image' src='/upload/images" + ary[i].name + "' width='200px' height='200px'>");
}
}
});
});
</script>
</head>
<本文>
<h2>jQuery Uploadify + Apache Fileupload の非同期ファイル アップロードの例 (2014-5-3)</h2>
<p>1. アップロードされるファイルのサイズと種類を制限できます。理論的には、どの種類のファイルでもアップロードできます (API に従って設定できます)。</p>
<p>2. Apache commons-fileupload-1.3.1.jar は、バックグラウンドでアップロード ツールキットとして使用されます。</p>
<p>3. ファイルのアップロード ディレクトリは任意に指定できます。web.xml で設定してください。</p>
<p>4. このページにはアップロードされた写真がありません。この部分はあなたに任せます。 </p>
<p>Uploadify API の詳細については、http://www.uploadify.com/documentation/ を参照してください。</p>
<p style="color: red">*この例に興味があり、さらに詳しく知りたい場合は、Java Private School オンライン学習コミュニティ (329232140) に参加してください。 </p>
<input id="fileupload" type="file" name="img" multiple="multiple"/>
<div id="J_div"></div>
</body>
</html>
web.xml
次のようにコードをコピーします。
<?xml バージョン="1.0" エンコーディング="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http ://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"metadata-complete="true"バージョン="3.0">
<ウェルカムファイルリスト>
<welcome-file>test_upload.html</welcome-file>
</ウェルカムファイルリスト>
<サーブレット>
<description>アップロード操作を処理するために特別に設計されたサーブレット</description>
<サーブレット名>FileUploadServlet</サーブレット名>
<サーブレットクラス>com.xiaoxing.upload.FileUploadServlet</サーブレットクラス>
<初期パラメータ>
<description>ファイルが保存される公式ディレクトリ。自分で設定できます</description>
<param-name>アップロードディレクトリ</param-name>
<param-value>/upload/images/</param-value>
</init-param>
<初期パラメータ>
<description>ファイルを保存する一時ディレクトリは自分で設定でき、その中のファイルは以下で設定したリスナーによって自動的に削除されます。 </説明>
<param-name>tempUploadDir</param-name>
<param-value>/upload/temp</param-value>
</init-param>
</サーブレット>
<サーブレットマッピング>
<サーブレット名>FileUploadServlet</サーブレット名>
<url-パターン>/アップロード</url-パターン>
</サーブレットマッピング>
<リスナー>
<description>一時ファイル リソースのクリーニング。ツールキットに付属しているため、作成する必要はありません</description>
<listener-class>org.apache.commons.fileupload.servlet.FileCleanerCleanup</listener-class>
</リスナー>
</web-app>