0 0

extjs4 文件上传 空指针异常5

   js代码:
    var formPanel = Ext.create('Ext.form.Panel', {
        title      : '基本信息->编辑',
        bodyStyle  : 'padding:  0px 0px 0 0px; '
        //width      : 500,
        margin: '0 0 0 0',
        fileUpload: true,
        frame: true,
        autoHeight: true,
        items      : [
         {
         xtype:'filefield',
         emptyText: '请选择一张图片',
         fieldLabel : '照片附件',
         buttonText:"浏览",
         name       : 'file'
         }]
      });
action代码:
public  byte[] getBytesFromFile(File file) throws IOException{
        InputStream is = new FileInputStream(file);
        // 获取文件大小
        long length = file.length();
        if (length > Integer.MAX_VALUE) {
            // 文件太大,无法读取
        throw new IOException("File is large"+file.getName());
        }
        // 创建一个数据来保存文件数据
        byte[] bytes = new byte[(int)length];
        // 读取数据到byte数组中
        int offset = 0;
        int numRead = 0;
        while (offset < bytes.length&& (numRead=is.read(bytes, offset,bytes.length-offset)) >= 0) {
            offset += numRead;
        }
        // 确保所有数据均被读取
if (offset < bytes.length) {
throw new IOException("Could not completely read    file"+file.getName());
        }
       
        is.close();
        return bytes;

    }
2013年4月10日 15:08

3个答案 按时间排序 按投票排序

0 0

您好,
xtype:'filefield', ExtJS的file组件在前台显示的是一个假的路径,传递给后台的是一个二进制流,无API,后台读取需要自己实现,建议你用xtype:'textfiled'例子如下:

var resForm = new Ext.FormPanel({
	              xtype:'form',
	              frame:true,
	              fileUpload : true,
	              border:false,
	              items:
	              [{
                        xtype:'textfield',
		                fieldLabel:"选择导入文件",
		                inputType : 'file',
		                name:'batch1',
		                labelWidth: 18
	                 }
	              ]
	           });

//上传用resForm.getForm().submit

2013年4月11日 10:30
0 0

我觉得最好的方法是看extjs4官方的demo
http://docs.sencha.com/ext-js/4-2/extjs-build/examples/form/file-upload.html

2013年4月10日 21:21
0 0

你接收文件用的是commons.fileuploads吗?
如果是的话参考下面的代码


package controller;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.fileupload.DiskFileUpload;
import org.apache.commons.fileupload.FileItem;

public class upload extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doPost(request, response);
	}

	@SuppressWarnings("deprecation")
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String hello = request.getParameter("savePath");
		String nttame = request.getParameter("name");
		HttpSession session = request.getSession();//通过session传参
		System.out.println("接收参数,hello="+hello+",name="+nttame);
		
		String name="";
		try {
			DiskFileUpload fu = new DiskFileUpload();
			// 设置允许用户上传文件大小,单位:字节,这里设为2m
			fu.setSizeMax(5 * 1024 * 1024 * 1024);
			// 设置最多只允许在内存中存储的数据,单位:字节
			fu.setSizeThreshold(10 * 1024 * 1024);
			// 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录
			fu.setRepositoryPath(System.getProperty("java.io.tmpdir"));
			fu.setHeaderEncoding("UTF-8");//解决中文文件名乱码。
			// 开始读取上传信息
			List fileItems = fu.parseRequest(request);
			// 依次处理每个上传的文件
			Iterator iter = fileItems.iterator();
			System.out.println(fileItems.size());
			while (iter.hasNext()) {
				FileItem item = (FileItem) iter.next();
				if (item.isFormField()) {//表单域的值
					System.out.println("表单域名" + item.getFieldName());
					System.out.println("表单值" + item);//如果不是文件表单域
					System.out.println("名字:"+item.getString());
				} else {
					name = item.getName();
					System.out.println("文件名:"+name);
					long size = item.getSize();
					if (name != null && !name.equals("") && size == 0) {
						continue;
					}
					String path = request.getRealPath("");
					File uploadFolder = new File(path + "/upload");
					if (!uploadFolder.exists())
						uploadFolder.mkdirs();
					File file=new File(path + "/upload/" + name);
					item.write(file);
				}
			}
			response.setContentType("text/html");// 必须设置返回类型为text,否则ext无法正确解析json字符串
			response.setCharacterEncoding("UTF-8");//设置编码字符集为utf-8,否则ext无法正确解析
			PrintWriter outs = response.getWriter();
			outs.write("{success:true}");
			outs.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

2013年4月10日 15:39

相关推荐

    ExtJS4多文件上传,带进度条及管理

    总之,"ExtJS4多文件上传,带进度条及管理"是Web开发中的高级功能,它结合了ExtJS4的组件化开发优势和swfupload的高效上传能力,为用户提供了一流的文件上传体验。开发者需要掌握相关技术和API,才能灵活地实现这一...

    EXTJS 多文件上传

    4. **错误处理**:如果某个文件上传失败,`MultiFileUploadField` 可以提供相应的错误提示,帮助用户理解问题所在并采取相应措施。 5. **自定义上传策略**:开发人员可以设置上传策略,例如限制文件类型、大小,...

    Extjs4文件上传,后台struts2

    在本文中,我们将深入探讨如何使用ExtJS 4与Struts2框架实现文件上传功能。ExtJS是一个强大的JavaScript库,提供了丰富的用户界面组件,而Struts2是Java Web开发中的一个MVC框架,用于处理后端业务逻辑。下面,我们...

    ExtJS4 上传文件类型和大小的判断方法(实例)

    对应的描述看本人博文《ExtJS4 上传文件类型和大小的判断方法(实例) 》:http://blog.csdn.net/biboheart/article/details/10579175 在这里不具体描述了。看题也大概可以知道这些代码实现了什么应用。

    extjs 4.2 多文件上传

    用Ext编写的多文件上传组件,已封装。 支持多文件上传,文件下载,文件删除,

    extjs 多文件上传

    在ExtJS中实现多文件上传功能,能够极大地提升用户体验,特别是在处理大量数据或文件时。本篇文章将详细探讨如何使用ExtJS实现多文件上传,并涵盖相关的关键知识点。 一、ExtJS 文件上传组件 在ExtJS中,我们可以...

    extjs多文件上传

    本文将深入探讨“extjs多文件上传”这一主题,结合标签“源码”和“工具”,我们将主要关注如何使用ExtJS库实现这一功能,并可能涉及第三方上传工具Plupload。 首先,ExtJS是一个基于JavaScript的UI框架,它提供了...

    ExtJS 多文件上传 UploadDialog For ExtJS3.x

    ### ExtJS 多文件上传 UploadDialog For ExtJS3.x #### 概述 在Web开发领域,特别是使用ExtJS框架进行界面设计时,文件上传功能是必不可少的一部分。然而,随着ExtJS版本的更新,原有的多文件上传组件可能不再兼容...

    extjs4 文件上传

    在EXTJS 4Demo压缩包中,可能包含了演示文件上传功能的示例代码,包括配置文件字段、监听事件、处理上传响应等。通过分析和学习这些示例,你可以更好地理解EXTJS 4.0如何实现文件上传功能,并将其应用到自己的项目中...

    ExtJS原生多文件拖动上传组件

    ExtJS原生多文件拖动上传组件 使用时修改包路径 1.多文件上传 2.支持拖动上传 3.支持图片压缩 4.支持图片合并 5.文件排序 可扩展实时图片预览 api //初始化画板 initCanvas //上传文件窗口 uploadWindow //初始化...

    ExtJS验证上传文件类型

    ExtJS 验证上传文件类型 ExtJS 中实现文件上传功能是非常方便的,但对于新手来说,控制文件上传类型是一个难题。例如,我们只想让用户上传特定的文件类型,例如txt文件,那么如何实现当用户上传非txt文件时,给出...

    Extjs多文件上传

    在ExtJS 4中,实现多文件上传功能是一项常见的需求,特别是在处理用户需要一次性上传多个图片或文档的场景下。这一功能通常涉及到Ajax异步通信、文件输入控件、前端文件预览以及后台服务器的处理逻辑。 首先,我们...

    批量上传文件 EXTJS文件上传 上传组件

    EXTJS是一种基于JavaScript的前端框架,它提供了丰富的用户界面组件,包括用于文件上传的组件。在EXTJS中,实现批量上传文件是一项常见的需求,尤其在处理大量数据或媒体文件时。EXTJS的文件上传组件提供了方便的...

    strut2+swfupload+extjs4文件上传

    本示例解决了strut2+swfupload+extjs4文件上传过程中,后台struts接收不到上传文件的问题。而这个问题如果用servlet做后台可能就不存在。开发者可以用本例源码移植到自己项目中使用 。

    Extjs4 swfupload 多文件上传

    在本文中,我们将深入探讨如何在ExtJS4框架中整合SWFUpload库,实现多文件上传功能。ExtJS4是一个强大的JavaScript组件库,用于构建富客户端应用,而SWFUpload则是一个流行的选择,用于在浏览器中实现文件上传,特别...

    extjs 多文件上传控件

    在ExtJS中,多文件上传控件是开发人员常用的一种功能,用于在网页上实现批量上传多个文件。这种控件允许用户一次性选择并上传多个文件,极大地提升了用户体验。 在ExtJS中实现多文件上传,主要涉及到以下几个关键...

    ExtJS4+strtus2文件上传实例源码

    在本文中,我们将深入探讨如何使用ExtJS4和Struts2框架实现文件上传功能。首先,让我们了解一下这两个关键技术和它们在文件上传中的作用。 **ExtJS4:** ExtJS4是一个强大的JavaScript库,用于构建富客户端应用程序...

    Extjs4 swfupload多文件上传

    总的来说,"Extjs4 swfupload多文件上传"是一个结合了ExtJS4组件化开发能力和SwfUpload高级上传功能的解决方案。它提供了一个高效、可控的多文件上传体验,同时也考虑到了服务器安全和性能优化。对于需要开发复杂Web...

    Extjs4后台框架、多文件上传

    在“Extjs4后台框架、多文件上传”项目中,我们可能看到的是一个实现后台与前端交互,特别是支持批量文件上传的解决方案。 在描述中提到的“完美支持extjs4”,意味着该压缩包包含的所有资源和代码都是为ExtJS4版本...

Global site tag (gtag.js) - Google Analytics