Javaシングルファイル、マルチファイルアップロード/アップロード進捗バーの実装
10693 ワード
ブログアドレス:https://ainyi.com/76
日常、仕事
ここでまとめてアップしましょう(以前やった練習なので、個人ブログにまとめましょう)
JAva ssmフレームワーク実装ファイルアップロード実装:単一ファイルアップロード、マルチファイルアップロード(ラジオと複数選択)、ajaxで非同期リフレッシュし、現在のインタフェースにアップロードされたファイルを表示
バックエンド
まずspringmvcのプロファイルでアップロードファイル解析器を構成します.
次にpom.xmlでアップロードファイルを構成する依存性
単一ファイルのアップロード
マルチファイルアップロード(==ラジオファイル==と==マルチファイル==の2種類を統合)
フロントエンド
フロントエンドコード:ファイルが複数選択され、実際には
Multipleプロパティを追加
onchangeイベントコード
現在のインタフェースにアップロードされたファイルをジャンプせずに表示するにはajax非同期リクエストを使用します.
ただし、ここではFormData()を使用してファイルオブジェクトを格納しています.ajaxはこれらのパラメータを割り当ててファイルアップロードを実現する必要があります.
コントロールレイヤ呼び出し
進捗バー
アップロードの進捗バーを表示するには、オリジナルajaxメソッドを使用します.
ファイルサイズを最適化するコードを添付します.
ブログアドレス:https://ainyi.com/76
日常、仕事
ここでまとめてアップしましょう(以前やった練習なので、個人ブログにまとめましょう)
JAva ssmフレームワーク実装ファイルアップロード実装:単一ファイルアップロード、マルチファイルアップロード(ラジオと複数選択)、ajaxで非同期リフレッシュし、現在のインタフェースにアップロードされたファイルを表示
バックエンド
まずspringmvcのプロファイルでアップロードファイル解析器を構成します.
209715200
4096
次にpom.xmlでアップロードファイルを構成する依存性
commons-io
commons-io
2.4
commons-fileupload
commons-fileupload
1.3.1
org.apache.commons
commons-lang3
3.3.2
単一ファイルのアップロード
/**
*
* @param file
* @param request
* @return
* @throws IllegalStateException
* @throws IOException
* @throws JSONException
*/
public static String simUpload(MultipartFile file, HttpServletRequest request)
throws IllegalStateException, IOException, JSONException{
if(!file.isEmpty()){
String path = request.getSession().getServletContext().getRealPath("/upload");
//
File parent = new File(path);
if(!parent.exists()) parent.mkdirs();
HashMap map = new HashMap();
String oldName = file.getOriginalFilename();
long size = file.getSize();
// TmFileUtil
//
String sizeString = TmFileUtil.countFileSize(size);
//
String ext = TmFileUtil.getExtNoPoint(oldName);
// ,10
String newFileName = TmFileUtil.generateFileName(oldName, 10, "yyyyMMddHHmmss");
String url = "upload/"+newFileName;
// ,parent
file.transferTo(new File(parent, newFileName));
map.put("oldname",oldName);//
map.put("ext",ext);
map.put("size",sizeString);
map.put("name",newFileName);//
map.put("url",url);
// json
return JSONUtil.serialize(map);
}else{
return null;
}
}
マルチファイルアップロード(==ラジオファイル==と==マルチファイル==の2種類を統合)
/**
*
* @param files
* @param request
* @return
* @throws IllegalStateException
* @throws IOException
* @throws JSONException
*/
public static List> mutlUpload(MultipartFile[] files, HttpServletRequest request)
throws IllegalStateException, IOException, JSONException{
if(files.length > 0){
String path = request.getSession().getServletContext().getRealPath("/upload");
//
File parent = new File(path);
if(!parent.exists()) parent.mkdirs();
//
List> listMap = new ArrayList>();
//
for (MultipartFile file : files) {
// map
HashMap map = new HashMap();
String oldName = file.getOriginalFilename();
long size = file.getSize();
// TmFileUtil
//
String sizeString = TmFileUtil.countFileSize(size);
//
String ext = TmFileUtil.getExtNoPoint(oldName);
// ,10
String newFileName = TmFileUtil.generateFileName(oldName, 10, "yyyyMMddHHmmss");
String url = "upload/"+newFileName;
// ,parent
file.transferTo(new File(parent, newFileName));
map.put("oldname",oldName);//
map.put("ext",ext);
map.put("size",sizeString);
map.put("name",newFileName);//
map.put("url",url);
listMap.add(map);
}
// json
return listMap;
}else{
return null;
}
}
フロントエンド
フロントエンドコード:ファイルが複数選択され、実際には
Multipleプロパティを追加
onchangeイベントコード
//
function uploadFile(obj){
// FormData ,
// form name value queryString
let form = new FormData();
let fileObj = obj.files[0];
form.append('doc',fileObj);
// ajax ...
}
// ( )
function mutiFiles(obj){
let form = new FormData();
let fileObj = obj.files;
let length = fileObj.length;
// fileObj
// let filese = Array.from(fileObj);
for(let i = 0; i < length; i++){
form.append('doc', fileObj[i]);
}
// ajax ...
}
// ( : , )
function multipartone(){
let file1 = $('.fileupon11').get(0).files[0];
let file2 = $('.fileupon12').get(0).files[0];
let file3 = $('.fileupon13').get(0).files[0];
// ,
isEmpty(file1) && isEmpty(file2) && isEmpty(file3) return;
let form = new FormData();
// , controller
form.append('doc', file1);
form.append('doc', file2);
form.append('doc', file3);
// ajax ...
}
現在のインタフェースにアップロードされたファイルをジャンプせずに表示するにはajax非同期リクエストを使用します.
ただし、ここではFormData()を使用してファイルオブジェクトを格納しています.ajaxはこれらのパラメータを割り当ててファイルアップロードを実現する必要があります.
$.ajax({
type: "post",
data: form, // FormData()
url: basePath+"/upload/mutl",
contentType: false, // false Content-Type
processData: false, // false jQuery formdata , XMLHttpRequest formdata
success: function(data){
// TODO
}
})
コントロールレイヤ呼び出し
package com.krry.controller;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.json.JSONException;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import com.krry.util.UploadUtil;
/**
*
* KrryUploadController
* @author krry
* @version 1.0.0
*
*/
@Controller
@RequestMapping("/upload")
public class KrryUploadController {
/**
*
* @param file
* @param request
* @return
* @throws IllegalStateException
* @throws IOException
* @throws JSONException
*/
@ResponseBody
@RequestMapping(value = "/file")
public String krryupload(@RequestParam("doc") MultipartFile file, HttpServletRequest request) throws IllegalStateException, IOException, JSONException{
// ,
return UploadUtil.simUpload(file, request);
}
/**
*
* @param file
* @param request
* @return
* @throws IllegalStateException
* @throws IOException
* @throws JSONException
*/
// MultipartFile[] file ,file file input name, MultipartFile ,
// MultipartFile[] , [Lorg.springframework.web.multipart.MultipartFile;.() ,
// @RequestParam ( MultipartFile ), :@RequestParam("file") MultipartFile[] files。
@ResponseBody
@RequestMapping(value = "/mutl")
public List> krryuploadMutl(@RequestParam("doc") MultipartFile[] file, HttpServletRequest request) throws IllegalStateException, IOException, JSONException{
// ,
return UploadUtil.mutlUpload(file, request);
}
}
進捗バー
アップロードの進捗バーを表示するには、オリジナルajaxメソッドを使用します.
function uploadFile(obj) {
// ...
//
// ajax
var xhr = new XMLHttpRequest();
// 、URL 。true
// 。 , , ,
xhr.open("post", basePath+"/upload/file", true);
//
xhr.onreadystatechange = function(){
if(xhr.readyState==4 && xhr.status==200){ // 4 200
//
var data = xhr.responseText.trim();
jdata = eval("("+data+")");
krry_uploadsuccess(jdata);
}
};
//
xhr.upload.addEventListener("progress", progressFunction, false);
// http : ,
xhr.send(form);
}
//
function progressFunction(event) {
let prograssbarDom = document.getElementById("prograssbar");
let fileRea = document.getElementById("fileRea");
if (prograssbarDom && event.lengthComputable) {
let percent = event.loaded / event.total; //
let p = Math.floor(percent*100);
prograssbarDom.style.width = p+"%";
fileRea.innerHTML = p+"%";
}
}
ファイルサイズを最適化するコードを添付します.
/**
*
* com.krry.uitl
* :format
* @author krry
* @param size
* @return String
* @exception
* @since 1.0.0
*/
public static String format(long size){
float fsize = size;
String fileSizeString;
if (fsize < 1024) {
fileSizeString = String.format("%.2f", fsize) + "B"; //2f
} else if (fsize < 1048576) {
fileSizeString = String.format("%.2f", fsize/1024) + "KB";
} else if (fsize < 1073741824) {
fileSizeString = String.format("%.2f", fsize/1024/1024) + "MB";
} else if (fsize < 1024 * 1024 * 1024) {
fileSizeString = String.format("%.2f", fsize/1024/1024/1024) + "GB";
} else {
fileSizeString = "0B";
}
return fileSizeString;
}
ブログアドレス:https://ainyi.com/76