extjs列表中文件上传与下载(带有重命名操作)

下面是extjs列表中文件上传与下载:

如图:

一、上传

上传按钮:

{ xtype: ‘button‘, width: 60, margin: ‘0 20‘, text: ‘ 上 传 ‘, handler: ‘onUploadClick‘ }]

上传按钮事件(打开上传窗口和传参):

    onUploadClick: function () {
        var me = this,
        view = me.getView(),
        vm = view.getViewModel(),
        store = me.getStore(‘gridstore‘),
        filType = view.up(‘window‘).FIL_TYPE,//附件类型(1:项目附件,2:需求附件,3需求明细附件)
        fileId = view.up(‘window‘).FILE_RELATION_ID;//附件关系ID(项目表ID,需求表ID,需求明细表ID)

        var userOper = Ext.create(‘MainApp.view.comm.UploadOperation.Operation‘);
        Ext.create(‘Ext.window.Window‘, {
            title: ‘上传文件‘,
            resizable: false,
            constrain: true,
            modal: true,
            items: userOper,
            width: 400,
            height: 120,
            _up: this,
            FIL_TYPE: filType,
            FILE_RELATION_ID:fileId,
            listeners: {
                beforeclose: function () {
                    store.reload();
                }
            }
        }).show();
    },

上传窗口:

/* ***********************************************
 * author :  zh
 * function: 上传文件
 * history:  created by 2017/12/18
 * ***********************************************/
Ext.define(‘MainApp.view.comm.UploadOperation.Operation‘, {
    extend: ‘Ext.form.Panel‘,
    requires: [
        ‘MainApp.view.comm.UploadOperation.OperationController‘,
        ‘MainApp.view.comm.UploadOperation.OperationModel‘,
        ‘Fm.ux.form.FileUpload‘,
        ‘Ext.window.MessageBox‘
    ],
    alias: ‘widget.Upload_Operation‘,
    controller: ‘Upload_OperationController‘,
    viewModel: {
        type: ‘Upload_Operation‘
    },
    modelValidation: true,
    tbar: [
      {
          xtype: "form",
          frame: false,
          anchor: ‘100%‘,
          header: false,
          align: ‘center‘,
          layout: ‘hbox‘,
          defaults: {
              anchor: ‘100%‘,
              allowBlank: false,
              msgTarget: ‘side‘,
              labelWidth: 60,
          },
          resuiltTpl: new Ext.XTemplate(
              ‘文件{fileName}上传成功!‘ //<br />
              //‘共{rowNum}条数据‘
          ),
          items: [
             {
                 xtype: ‘filefield‘,
                 emptyText: ‘请选择要上传的文件‘,
                 name: ‘fileUpName‘,
                 buttonText: ‘浏览…‘,
                 width: 180,
                 margin: ‘0 0 0 5‘
             },
          {
              xtype: ‘button‘,
              text: ‘导入‘,
              margin: ‘0 0 0 5‘,
              handler: function () {
                  var that = this.up(‘form‘);
                  var form = that.getForm();
                  if (form.isValid()) {
                      var filType = this.up(‘window‘).FIL_TYPE;//附件类型(1:项目附件,2:需求附件,3需求明细附件)
                      var fileRelationId = this.up(‘window‘).FILE_RELATION_ID;//附件关系ID(项目表ID,需求表ID,需求明细表ID)
                      form.submit({
                          url: ‘/DataBase/UpLoadFile?filType=‘ + filType + ‘&fileRelationId=‘ + fileRelationId,
                          waitMsg: ‘数据上传中...‘,
                          success: function (fp, o) {
                              Ext.Msg.show({
                                  title: ‘成功‘,
                                  msg: that.resuiltTpl.apply(o.result),
                                  minWidth: 200,
                                  modal: true,
                                  icon: Ext.Msg.INFO,
                                  buttons: Ext.Msg.OK,
                                  fn: function (btn) {
                                      var upw = that.up(‘window‘)._up;
                                      upw.onSearchClick();
                                  }
                              });
                          },
                          failure: function () {
                              Ext.Msg.alert("失败", Ext.JSON.decode(this.response.responseText).message);
                          }
                      });
                  }
              }
          },
          {
              xtype: ‘button‘,
              text: ‘清除‘,
              margin: ‘0 0 0 5‘,
              handler: function () {
                  this.up(‘form‘).getForm().reset();
              }
          }]
      }
    ],
    items: [
        {
            xtype: ‘panel‘,
            items: [
            ],
            buttonAlign: ‘center‘,
            buttons: [
                {
                    text: ‘关闭‘,
                    width: 80,
                    handler: ‘onCancel‘
                }
            ]
        }],
});

窗口代码主要看导入按钮事件

上传后台方法(重新使用guid命名,避免文件重复被替换,原名称需要保存到数据库):

        /// <summary>
        /// 上传文件
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ActionResult UpLoadFile(string filType,string fileRelationId)
        {
            try
            {
                WFile wfile = new WFile();
                HttpPostedFileBase file = Request.Files[0];
                if (file == null)
                {
                    return Json(new { success = false, message = "没有选择文件!", errors = new { fileUpName = "上传数据出错!" } });
                }
                //if (!file.FileName.Contains(".doc") || !file.FileName.Contains(".docx"))
                //{
                //    return Json(new { success = false, message = "文件格式不正确,只能上传Word文件!", errors = new { fileUpName = "上传数据出错!" } });
                //}
                string guId = Guid.NewGuid().ToString("N");
                string extension = Path.GetExtension(file.FileName);

                var filePath = Path.Combine(Request.MapPath("~/Upload"), Path.GetFileName(guId + extension));
                file.SaveAs(filePath);

                //数据库操作
                wfile.FIL_TYPE = filType;
                wfile.FILE_RELATION_ID = fileRelationId;
                wfile.FIL_NAME = file.FileName;
                wfile.FIL_PATH = guId + extension;
                _wfile.Add(wfile);

                return Json(new { success = true, fileName = file.FileName, rowNum = 1 });
            }
            catch (System.Exception ex)
            {
                return Json(new { success = false, message = ex.Message, errors = new { fileUpName = "上传数据出错!" } });
            }
        }

二、下载

下载按钮:

    columns: [
        { dataIndex: ‘NUMROW‘, text: ‘序号‘, width: 40 },
        { dataIndex: ‘FIL_NAME‘, text: ‘附件名称‘, flex: 1 },
        { dataIndex: ‘FIL_PATH‘, header: ‘文件路径‘, align: ‘center‘, flex: 1, hidden: true
    },
        { dataIndex: ‘USER_NAME‘, text: ‘创建人‘, flex: 1 },
        {
            text: ‘上传时间‘,
            dataIndex: ‘CREATE_DATE‘,
            align: ‘left‘,
            width: 125,
            flex: 1,
            renderer: Ext.util.Format.dateRenderer(‘Y-m-d‘)
        },
        {
            text: ‘操作‘, xtype: ‘actioncolumn‘, width: 80,
            flex: 1,
            items: [
            {
                icon: ‘../images/redactBtn_down.PNG‘, handler: ‘DownFile‘
            },
            ]

        }
    ],

下载按钮事件:

    DownFile: function (grid, rowIndex, colIndex, e, td, tr) {
        window.location.href = ‘/DataBase/DownFile?fileName=‘ + tr.get(‘FIL_NAME‘) + "&filePathName=" + tr.get(‘FIL_PATH‘);
    }

下载后台方法(需要用原附件名称替换guid名称完成下载):

        /// <summary>
        /// 下载附件
        /// </summary>
        /// <param name="fileName">原文件名称</param>
        /// <param name="filePathName">附件地址名称</param>
        /// <returns></returns>
        public ActionResult DownFile(string fileName, string filePathName)
        {
            try
            {
                var filePath = Path.Combine(Request.MapPath("~/Upload"), Path.GetFileName(filePathName));
                FileStream fs = new FileStream(filePath, FileMode.Open);
                byte[] bytes = new byte[(int)fs.Length];
                fs.Read(bytes, 0, bytes.Length);
                fs.Close();
                System.Web.HttpContext.Current.Response.ContentType = "application/octet-stream";
                //通知浏览器下载文件而不是打开
                System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName);
                System.Web.HttpContext.Current.Response.BinaryWrite(bytes);
                System.Web.HttpContext.Current.Response.Flush();
                System.Web.HttpContext.Current.Response.End();

                return Json(new { success = true, fileName = fileName, rowNum = 1 });
            }
            catch (System.Exception ex)
            {
                return Json(new { success = false, message = ex.Message, errors = new { fileUpName = "上传数据出错!" } });
            }
        }
时间: 2024-08-25 23:40:37

extjs列表中文件上传与下载(带有重命名操作)的相关文章

C# 之 FTP服务器中文件上传与下载(三)

通过上一篇博客<C# 之 FTP服务器中文件上传与下载(二)>,我们已经实现将文件上传到我们创建的FTP服务器.今天我们就一起来看看怎么样实现从FTP服务器中下载我们所需要的文件.         我们想实现的效果是在页面上有一个超链接,超链接显示为我们想要下载的文件名.点击该文件名进入下载页面.首先我们在前台插入一个超链接,但是这个超链接为后台拼接的超链接. using System; using System.Collections.Generic; using System.Linq;

C# 之 FTP服务器中文件上传与下载(四)

        通过上一篇博客<C# 之 FTP服务器中文件上传与下载(三)>,我们已经实现将文件从我们创建的FTP服务器中下载到本地.今天就最后给大家讲解一下怎么对FTP中的文件进行重命名和删除操作. 首先在前台添加两个重命名和删除的按钮 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Defaul

文件上传工具类(重命名,以及判断类型)

public class FileUploadUtil {     public static final List<String> ALLOW_TYPES = Arrays.asList(             "image/jpg","image/jpeg","image/png","image/gif"     ); //文件重命名     public static String rename(Strin

struts2中的文件上传和下载

天下大事,必做于细.天下难事,必作于易. 曾经见过某些人,基础的知识还不扎实就去学习更难的事,这样必然在学习新的知识会很迷惑结果 再回来重新学习一下没有搞懂的知识,这必然会导致学习效率的下降!我写的这篇上传和下载都很基础. 十分适合初学者! jsp:页面 <!--在进行文件上传时,表单提交方式一定要是post的方式,因为文件上传时二进制文件可能会很大,还有就是enctype属性,这个属性一定要写成multipart/form-data, 不然就会以二进制文本上传到服务器端--> <for

gitlab使用过程中遇到大文件上传或下载失败的问题,总结一下

环境如下:gitlab服务器redhat,客户端环境mac os,如果是其他环境遇到问题仅供参考 如果gitlab上传代码提示: error: RPC failed; result=22, HTTP code = 411 该问题是由于客户端设置的http_post_buffer大小不足导致的,解决方法如下: 进入到工程所在的终端目录下执行: git config http.postBuffer 524288000 如果gitlab上传代码提示: error: RPC failed; result

ExtJS 中文件上传控件

1 Ext.onReady(function(){ 2 var fileUpload = new Ext.FormPanel({ 3 id:'fileUpload', 4 frame:true, 5 fileUpload:true, 6 items:[{ 7 xtype:'textfield', 8 labelStyle : 'text-align:right;', 9 allowBlank:false, 10 fieldLabel:'选择文件', 11 inputType:'file', 12

java里面的文件上传与下载

文件的上传与下载主要用到两种方法:1.方法一:commons-fileupload.jar commons-io.jarapache的commons-fileupload实现文件上传,下载 [upload]package com.handson.bbs.servlet; import java.io.File;import java.io.IOException;import java.util.Date;import java.util.List;import javax.servlet.Se

FTP文件上传与下载

实现FTP文件上传与下载可以通过以下两种种方式实现,分别为:1.通过JDK自带的API实现:2.通过Apache提供的API是实现. 第一种方式 [java] view plaincopy package com.cloudpower.util; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import sun.n

Java 文件上传与下载、email

1. 文件上传与下载 1.1 文件上传 文件上传,要点: 前台: 1. 提交方式:post 2. 表单中有文件上传的表单项: <input type="file" /> 3. 指定表单类型: 默认类型:enctype="application/x-www-form-urlencoded" 文件上传类型:multipart/form-data 手动实现文件上传 <body> <form name="frm_test"