【问题标题】:Drag and Drop Images browse upload issue in Struts 2Struts 2 中的拖放图像浏览上传问题
【发布时间】:2017-10-07 09:07:23
【问题描述】:

JSP 表单

    <s:form method="POST" enctype="multipart/form-data" action="uploaddocumentfile" id="uploaddocumentfile" namespace="/documents" >
        <s:file name="upload" id="holder"></s:file>
   /s:form>

jQuery

function readfiles(files) {
    console.log(files);
    var a=files[0].name;  // name of file 
    $("#uploaddocumentfile").submit(); // problem :how to pass value in action class of type File upload  getter setter
}
var holder = document.getElementById('holder');
holder.ondragover = function () { this.className = 'hover'; return false; };
holder.ondragend = function () { this.className = ''; return false; };
holder.ondrop = function (e) {
     this.className = '';
    // console.log(e.dataTransfer.files[0].path);
     e.preventDefault();
     readfiles(e.dataTransfer.files);
    } 

动作类: 公共类 UploadFilesAction 扩展... {

private File upload;

public File getUpload() {
    return upload;
}
public void setUpload(File upload) {
    this.upload = upload;
}
}

问题:在浏览文件上传时,我们可以通过文件上传getter setter自动获取动作类中的表单文件值,但拖放我们如何获取文件值

【问题讨论】:

标签: struts2 drag-and-drop image-upload


【解决方案1】:

可以使用dropzonejs插件实现文件拖拽

JSP

<div id="template_dropzone"></div>

脚本

var profilePic = null;
var dropZone = $('#template_dropzone').dropzone({
                 url: "#",
                 maxFiles: 1,
                 addRemoveLinks: true,
                 init: function() {
                    this.on("addedfile", function(file) {
                     // trigger when a file is added
                 });
                     this.on("complete", function(file) {
                       // trigger when the uploading of a file is completed
                        profilePic = file;
                  });
                     this.on("removedfile", function(file) {
                         var noOfFiles =  this.files.length; // can check No. of files
                  });
               });
    $('#uploadFile').on('click',function(event){
      var data = new FormData();
      data.append('upload',profilePic);
       $.ajax({
           url: 'uploadProfilePic',
           method: 'POST',
           data: data,
           cache: false,
           contentType: false,
           processData: false,
           success: function(result) {}
        });
    });

在 Action 类中,您可以通过简单地创建带有 getter 和 setter 的 String 变量来检索文件名或内容类型,如下所示:-

    private File upload;
    private String uploadFileName;
    private String uploadContentType;

    public File getUpload() {
        return upload;
    }

    public void setUpload(File upload) {
        this.upload = upload;
    }

    public String getUploadFileName() {
        return uploadFileName;
    }

    public void setUploadFileName(String uploadFileName) {
        this.uploadFileName = uploadFileName;
    }

    public String getUploadFileContentType() {
        return uploadFileContentType;
    }

    public void setUploadFileContentType(String uploadFileContentType) {
        this.uploadFileContentType = uploadFileContentType;
    }

【讨论】:

  • 我不想使用任何插件.. 我可以在我的代码中将 profilePic 值作为值传递并调用 onclick listner 可以直接在读取文件中调用.. function readfiles(files) { console 。日志文件); var a=files[0].name; // 文件名 var data = new FormData(); data.append('上传',a); $.ajax({ url: 'uploadProfilePic', 方法: 'POST', data: data, cache: false, contentType: false, processData: false, success: function(result) {} }); ......
  • 如果使用 dropzone js 那么 jsp 文件将
  • 是的,你可以。确保 a 是文件而不是文件名 `var a=files[0];'
  • 请求是通过 ajax 发送而不是表单提交。
  • 值得注意的是,要使用 Struts2 和 dropzone.js 上传多个文件,需要自定义 hack。幸运的是,I've documented it here ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-19
  • 1970-01-01
  • 2011-03-31
  • 1970-01-01
  • 2018-05-07
相关资源
最近更新 更多