2
9

More than 5 years have passed since last update.

Springboot+JQueryを使ってDRAG&DROPでファイルをアップロードする。

Last updated at Posted at 2018-09-13

ファイルをDrag&Dropしてアップロードをする要件があったので投稿します。

1.HTML

index.html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
<title>Tutorial: Upload</title>
<script src="//ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
<style>
    #dragdroparea {
        border:2px dotted #0B85A1;
        width:500px;
        height: 100px;
        color:#92AAB0;
        text-align:left;vertical-align:middle;
        padding:10px 10px 10 10px;
        margin-bottom:10px;
        font-size:200%;
    }
</style>
</head>
<body>
  <h1>ドラッグ&ドロップでファイルアップロード</h1>
  <div id="dragdroparea">ここにドロップしてください。</div>
  <br/><br/>
  <div id="status1"></div>
  <script>
    $(function() {
        function sendFileToServer(formData,status){
        var uploadURL ="/upload"; //Upload URL
          $.ajax({
            url: uploadURL,
            type: "POST",
            contentType:false,
            processData: false,
            cache: false,
            data: formData,
            timeout: 30000,
            beforeSend: function(xhr, settings) {
              //送信前の処理
            },
            complete: function(xhr, textStatus) {
              //通信完了
            },
            success: function(result, textStatus, xhr) {
              //ajax通信が成功した
              $("#status1").append("File upload Done<br>");
            },
            error: function(xhr, textStatus, error) {
              //ajax通信が失敗した
              $('#status1').append('送信に失敗しました<br>');
            }
          });
      }
        function handleFileUpload(files,obj){
         var fd = new FormData();
           for (var i = 0; i < files.length; i++){
             fd.append('files', files[i]);
           }
           sendFileToServer(fd,status);
        }
        $(document).ready(function(){
            var obj = $("#dragdroparea");
            obj.on('dragenter', function (e) {
                e.stopPropagation();
                e.preventDefault();
            });
            obj.on('dragover', function (e) {
                 e.stopPropagation();
                 e.preventDefault();
            });
            obj.on('drop', function (e) {
             e.preventDefault();
             var files = e.originalEvent.dataTransfer.files;
             handleFileUpload(files);
            });
            $(document).on('dragenter', function (e){
                e.stopPropagation();
                e.preventDefault();
            });
            $(document).on('dragover', function (e){
              e.stopPropagation();
              e.preventDefault();
            });
            $(document).on('drop', function (e){
                e.stopPropagation();
                e.preventDefault();
            });
        });
    });
  </script>
</body>
</html>

handleFileUploadで、formの変数"files"にファイルをセットします。

2.Controller(サーバ側)

UploadController.java
import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

@Controller
public class HeloController {
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String index(Model model) {
        return "index";
    }
    @RequestMapping(value = "/upload", method = RequestMethod.POST)
    public String index(@RequestParam("files") List<MultipartFile> files, Model model) {
        for (MultipartFile file : files) {
            System.out.println("getOriginalFilename="+file.getOriginalFilename());
        }
        return "index";
    }
}

サーバは

@RequestParam("files") List<MultipartFile> files

とすることで、MultipartFileがセットされます。

3.確認

コンソールのログにアップロードしたファイルが表示されました。

getOriginalFilename=CSVファイル.csv
getOriginalFilename=CSVファイル (1).csv
getOriginalFilename=CSVファイル (2).csv
2018-09-14 00:30:22.556 DEBUG 8148・・・・
2
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
9