springmvc異步上傳及多文件上傳


上傳文件的基本配置等在springmvc實現文件上傳下載中已經寫過了,在上一篇中寫的是單文件上傳,這一篇主要寫的是多文件異步上傳;

應用場景:上傳相冊功能,商城上傳縮略圖等,

這些功能需要用戶在選中圖片后就知道是否上傳成功,而且圖片的數量可能有多個,因此需要實現異步多文件下載。

后台的功能需要改動的不多:

@Controller
public class FileController {


    private static final String PATH="H:\\IdeaSpace\\ce809\\out\\static\\upload\\";
    @RequestMapping("/file")
    @ResponseBody
    public List<String> file(@RequestParam(value = "img") MultipartFile[] files, HttpServletRequest request) {
        /*創建集合對象,用來存放上傳后生成文件名*/
        List<String> fileNames = new ArrayList<>();
        for (int i = 0; i < files.length; i++) {
            MultipartFile file = files[i];
            /*生成文件名*/
            StringBuilder filePath = new StringBuilder(PATH);
            filePath.append(UUID.randomUUID().toString());
            String fileName = file.getOriginalFilename();
            filePath.append(fileName.substring(fileName.lastIndexOf(".")));

            File localFile = new File(filePath.toString());

            if (!localFile.getParentFile().exists())
                localFile.mkdirs();
            try {
                file.transferTo(localFile);
               /*上傳成功,將文件名添加到集合中*/
                fileNames.add(localFile.getName());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
//        返回集合
        return fileNames;
    }
}

實現多文件上傳,只需要在后台傳參時使用一個數組接參就好了,下面是前端的代碼,要實現異步上傳,需要一個js插件:

前端實現多文件上傳,可以使用多個input標簽,用一樣的name來達到效果:

不過這種方法效率不高,因為如果需要上傳的照片、文件數量多時,比較麻煩,因此就想有沒有方法能在一個input框中選擇文件時通過ctrl鍵選中多個文件:

<form id="fileUpForm" method="post" enctype="multipart/form-data">
    <!--multiple="multiple"實現選擇多個文件-->
    <input type="file" name="img"  multiple="multiple">
    <input type="button" onclick="fileUp()" value="上傳">
</form>
<div id="img"></div>

js異步代碼:

<script>
    function fileUp() {
        /*ajaxSubmit是jquery.form.js封裝好的方法*/
        $("#fileUpForm").ajaxSubmit({
            type:"post",
            url:"${pageContext.request.contextPath}/file",
            success:function (data) {
                $.each(data,function (index, item) {
                    $("#img").append('<img src=static/upload/'+item+' width="100px"/>');
                })
            },
            error:function (xhr, msg) {
                alert(msg);
            }
        })
    }
</script>

 上面是以上傳圖片為例,異步上傳后,會將服務器上生成的問件名的集合返回,方便用戶查看是否上傳成功,如果有其它類型文件,可以通過后綴判斷來生成不同的標簽。如果想要在選中文件后,直接上傳,可以設置input標簽change=‘fileUp()’

也可以不使用插件,使用jquery實現:

function fileUp() {
var formData = new FormData();
var files = document.getElementById("file").files;
$.each(files,function (index, item) {
formData.append("img", item);
})
$.ajax({
type:"post",
contentType:false,
data:formData,
processData : false,
url:"${pageContext.request.contextPath}/file",
success:function (data) {
$.each(data,function (index, item) {
$("#img").append('<img src=static/upload/'+item+' width="100px"/>');
})
},
error:function (xhr, msg) {
alert(msg);
}
})
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM