• bootstrap多次上传文件


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 橘猫大侠_ 2024-04-12 10:25 采纳率: 0% 浏览 4 首页/ 前端 / 已结题 bootstrap多次上传文件 jquerybootstrap前端 在开发过程中遇到一个需求,在一个页面中填写多个信息并上传文件,之后要求通过拖拽的方式上传文件,上传文件有时会跨文件夹选择,就需要多次选择,并且不覆盖之前上传的,且可以删除,现在不能直接把文件列表赋值给input,也不能操作formData,应该怎样实现这个需求?也想过分次上传,但是改动太大,尽量不想这样.前端用的bootstrap,jsp,easyUI.前端用的这种方式 ```javascript $('#form').form('submit', { url : url, onSubmit : function(param) { ``` param["A"] = $("#A").val(); ``` }, success : function(data){ ``` } }); ``` 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    3条回答 默认 最新

    • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-12 10:25
      关注

      引自免费微信小程序:皆我百晓生

      要实现这个功能,您可以使用HTML5的File API以及jQuery的插件(例如:blueimp/jQuery-File-Upload)。下面是一个详细的步骤和示例代码,用于创建一个可拖放、支持多选文件、不覆盖已有文件且具有删除选项的文件上传组件。

      首先,你需要引入必要的库:

      1. Bootstrap CSS 和 JS
      2. jQuery
      3. blueimp/jQuery-File-Upload:这是一个强大的文件上传插件,支持多种功能,包括拖放上传、预览、多选等。
      4. 如果需要删除按钮,可以使用Font Awesome图标库,提供删除图标

      HTML部分:

      
      
      
          
          Multiple File Upload
          
          
          
          
          
          
          
      
      
      
      

      Multi-File Upload

      JavaScript部分 (upload.js):

      $(function () {
          $('#fileuploader').fileupload({
              url: 'your_upload_url',
              type: 'POST',
              autoUpload: true,
              maxNumberOfFiles: null, // Set this to allow unlimited uploads
              sequentialUploads: false,
              add: function (e, data) {
                  var files = e.target.files;
                  for (var i = 0; i < files.length; i++) {
                      var file = files[i];
                      var fileInput = $('');
                      fileInput.val(file.name);
                      data.files.push(fileInput[0]);
                  }
      
                  data.submit.call(data.context, data);
              },
              done: function (e, data) {
                  $.each(data.result.files, function (index, file) {
                      if (file.error) {
                          console.log("Error uploading " + file.name + ": " + file.error);
                      } else {
                          console.log("Successfully uploaded " + file.name);
                      }
                  });
              },
              progressall: function (e, data) {
                  var progress = parseInt(data.loaded / data.total * 100, 10);
                  $('.progress-bar').css('width', progress + '%').text(progress + '%');
              }
          }).on('fileuploadprocessalways', function (e, data) {
              var index = data.index,
                  file = data.files[index],
                  node = $(data.context.children()[index]);
      
              if (file.preview) {
                  node.find('.preview').append('');
              }
              if (file.error) {
                  node.addClass('error');
              }
          });
      
          // Add delete button functionality
          $('body').on('click', '.delete-button', function (e) {
              var $this = $(this),
                  input = $this.prev('input[type="hidden"]');
              
              $this.parent().remove();
              input.remove();
          });
      });
      

      这个示例代码中,我们使用了blueimp/jQuery-File-Upload插件来处理文件上传。add事件用于将选中的文件名添加到隐藏输入框中,并提交数据。done事件用于处理上传结果,显示成功或错误信息。progressall事件用于更新进度条。此外,我们还添加了一个删除按钮的功能,当用户点击时,会移除对应的文件和隐藏输入框。

      为了完成整个功能,您还需要在后端服务器上设置一个接受文件上传的URL,并处理接收到的文件。这通常涉及读取请求体中的文件流,并将其保存到服务器上的某个位置。

      注意,这只是一个基础示例,根据您的实际项目需求可能需要进行一些调整。例如,您可能需要对文件类型、大小进行验证,或者添加更复杂的进度反馈等。

      展开全部

      评论 编辑记录
    • GISer Liu 2024-04-12 12:15
      关注

      该回答引用自GPT-3.5,由博主GISer Liu编写:

      针对你的问题,我可以给出以下解决思路和方案:

      问题分析:

      1. 需要在一个页面中填写多个信息并上传文件。
      2. 上传文件通过拖拽方式实现,允许多次选择文件,不覆盖之前上传的,并且可以删除。
      3. 不能直接将文件列表赋值给input,也不能操作formData。
      4. 前端使用的是Bootstrap、JSP、EasyUI。

        解决思路:

      5. 使用前端 JavaScript 实现拖拽上传功能。
      6. 维护一个文件列表,允许多次添加文件,实现文件的添加和删除功能。
      7. 在提交表单时,将文件列表信息一并提交到后端处理。

        解决方案:

      8. 在页面上创建一个区域,实现文件的拖拽上传功能。可以使用HTML5的元素配合JavaScript来实现拖拽上传。
      9. 维护一个文件列表,每次选择文件或拖拽文件时,将文件信息添加到列表中,并显示在页面上。为每个文件添加删除按钮,实现删除功能。
      10. 使用JavaScript在表单提交时,将文件列表中的文件信息一并提交到后端处理。可以使用Ajax来异步提交表单数据。
      11. 后端接收到文件信息后,进行处理保存操作。

        代码大纲:

        javascriptCopy code
        // HTML部分
        
        "fileDropArea" class="drop-area"> 将文件拖拽至此处上传
          "fileList" class="file-list">
        "form" action="upload.jsp" method="post"> type="submit" value="提交">
        // JavaScript部分 // 文件列表 let files = []; // 拖拽上传功能 const fileDropArea = document.getElementById('fileDropArea'); fileDropArea.addEventListener('dragover', handleDragOver); fileDropArea.addEventListener('drop', handleFileSelect); // 文件选择功能 const fileInput = document.createElement('input'); fileInput.type = 'file'; fileInput.addEventListener('change', handleFileSelect); // 提交表单功能 const form = document.getElementById('form'); form.addEventListener('submit', handleSubmit); // 处理拖拽事件 function handleDragOver(event) { event.preventDefault(); } // 处理文件选择事件 function handleFileSelect(event) { event.preventDefault(); const fileList = event.dataTransfer ? event.dataTransfer.files : event.target.files; for (let i = 0; i < fileList.length; i++) { const file = fileList[i]; addFileToList(file); } } // 添加文件到列表 function addFileToList(file) { files.push(file); const listItem = document.createElement('li'); listItem.textContent = file.name; const deleteButton = document.createElement('button'); deleteButton.textContent = '删除'; deleteButton.addEventListener('click', () => { removeFileFromList(file); listItem.remove(); }); listItem.appendChild(deleteButton); document.getElementById('fileList').appendChild(listItem); } // 从列表中移除文件 function removeFileFromList(file) { const index = files.indexOf(file); if (index !== -1) { files.splice(index, 1); } } // 提交表单 function handleSubmit(event) { event.preventDefault(); const formData = new FormData(); for (let i = 0; i < files.length; i++) { formData.append('files', files[i]); } // 将其他表单信息也添加到formData中 formData.append('A', document.getElementById('A').value); // 使用Ajax提交表单数据 const xhr = new XMLHttpRequest(); xhr.open('POST', form.action); xhr.onload = function() { if (xhr.status === 200) { // 上传成功的处理 console.log('上传成功'); } else { // 上传失败的处理 console.error('上传失败'); } }; xhr.send(formData); }
        这个方案可以满足你的需求,实现了在页面中填写多个信息并上传文件,并且通过拖拽的方式上传文件,允许多次选择文件并可以删除。

      如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑

      展开全部

      评论
    • Kwan的解忧杂货铺 Java领域优质创作者 2024-04-16 12:15
      关注

      中午好🌞🌞🌞
      本答案参考ChatGPT-3.5

      根据你的需求,可以通过以下方式实现:

      1. 在 HTML 中添加一个文件上传区域,可以使用 Bootstrap 中的文件上传组件。
      2. 当用户上传文件时,将其添加到文件列表中。可以使用 jQuery 的 drag and drop API 实现拖拽上传,同时添加一个删除按钮,让用户可以删除已上传的文件。
      3. 当用户提交表单时,将所有的信息以 FormData 的形式添加到请求中,并将文件列表也添加到 FormData 中。
      4. 在后端将文件列表保存到服务器,同时将其与其他提交的信息一同存储到数据库中。

      修改后的代码示例:

      HTML:

      JavaScript(使用 jQuery 和 Bootstrap):

      // 初始化文件上传组件
      $("#upload").fileinput({
        theme: "fa",
        uploadUrl: "/upload",
        uploadAsync: false,
      });
      
      // 添加文件到文件列表
      $("#upload").on("change", function (event) {
        var files = event.target.files;
        var html = '';
        for (var i = 0; i < files.length; i++) {
          var file = files[i];
          html += '
      '; html += ' ' + file.name + ''; html += ' '; html += '
      '; } $("#fileList").append(html); }); // 删除文件 $("#fileList").on("click", ".file-remove", function (event) { $(this).closest(".file-item").remove(); }); // 提交表单 $("#form").on("submit", function (event) { event.preventDefault(); var form = $(this)[0]; var formData = new FormData(form); $(".file-item").each(function () { var file = $(this).find(".file-name").text(); formData.append("files[]", file); }); $.ajax({ url: $(this).attr("action"), data: formData, type: "POST", processData: false, contentType: false, success: function (data) { // 处理响应 }, }); });

      这是一个基本的解决方案,可以按照你的需求进行修改。

      展开全部

      评论
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    Python 变量声明(2)
    typescript85-class组件类型
    11-DMA控制器
    haas506 2.0开发教程-高级组件库-modem.sms(仅支持2.2以上版本)
    DockerCompose安装、使用 及 微服务部署实操
    Docker 安装 Gitlab
    can中继 智能CAN总线隔离中继器集线器CANBridge-300/400
    实战SpringMVC之CRUD
    同城配送管理系统
    2023.9.19 关于 数据链路层 和 DNS 协议 基本知识
  • 原文地址:https://ask.csdn.net/questions/8087244