GXT 文件上传

关于GWT的文件上传网上有封装比较好的例子 大家可以搜索:gwtextux。

gwtextux是基于GWT-EXT开发的。本文写的是针对GXT组件开发的文件上传例子。

 

GXT 文件上传主要分五步:

 

第一步,设置Form的提交属性

 

 

// 选择上传路径 form
FormPanel formPanel = new FormPanel ();
// 设置form参数MULTIPART
formPanel.setEncoding (FormPanel.Encoding.MULTIPART);
// 设置提交方式POST
formPanel.setMethod (FormPanel.Method.POST);
// 设置上传请求地址
formPanel.setAction ("fileupload.do");
 

 

第二步:添加上传组件

 

// 文件选择
FileUploadField fileUploadField = new FileUploadField ();
fileUploadField.setFieldLabel ("请选择上传文件");
fileUploadField.setName ("file");

 

  第三步:提交按钮

 

Button button = new Button ("上传");
        button.addListener (Events.OnClick, new Listener <BaseEvent> ()
        {
            @Override
            public void handleEvent (BaseEvent be)
            {
                formPanel.submit ();
            }

 

  第四步:后台接受上传流的Servlet

 

public void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {

        // 获取上传句柄
        ServletFileUpload upload = new ServletFileUpload ();
        FileItemIterator iter;
        HttpSession session = request.getSession ();
        // 获取文件长度
        String fileSizeString = request.getHeader ("Content-Length");

        //将文件长度转化为数字
        String sourceidString = null;
        try
        {
            // 从request中获取参数
            iter = upload.getItemIterator (request);
            while (iter.hasNext ())
            {
                FileItemStream item = iter.next ();
                // 资源名称
                if (TermStrings.SOURCE_FILED.equals (item.getFieldName ()))
                {
                    InputStream stream = item.openStream ();
                    sourceidString = Streams.asString (stream, "utf-8");
                                  }
                // 获取文件输入流
                if ("file".equals (item.getFieldName ()))
                {
                    // 获得系统时间
                    BufferedInputStream bin = new BufferedInputStream (item.openStream ());
                    // 获得文件路径
                    String filePath = getServletContext ().getRealPath ("后台存储文件.xls");
                  
                    File file = new File (filePath);
		    // 创建写文件的流
                    BufferedOutputStream bout = new BufferedOutputStream (new FileOutputStream (file));
                    byte[] b = new byte[8 * 1024];

                    int i = bin.read (b);
                    while (i > 0)
                    {
		        //写入文件
                        bout.write (b, 0, i);
                        i = bin.read (b);
                    }
                    bout.flush ();
                    bout.close ();

  第五步:web.xml

 

 

 <servlet-mapping>
    <servlet-name>FileUpload</servlet-name>
    <url-pattern>/fileupload.do</url-pattern>
  </servlet-mapping>

    <servlet>
    <servlet-name>FileUpload</servlet-name>
    <servlet-class>net.carefx.term.server.servlet.FileUpload</servlet-class>
  </servlet>
 

 

如果要实现读取进度,我的做法是时间轮训,通过后台获取文件长度:

        String fileSizeString = request.getHeader ("Content-Length");

总长度,然后根据文件写入流的写入次数判断写入的百分比。将此数据在前台显示。

文件上传需要使用第三方jar包

 

commons-fileupload-1.2.1.jar


你可能感兴趣的:(.net,Web,servlet,ext,gwt)