首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用多部分/表单数据发布ajax调用?

如何使用多部分/表单数据发布ajax调用?
EN

Stack Overflow用户
提问于 2013-06-11 23:33:20
回答 1查看 13.1K关注 0票数 3

我需要通过AJAX调用从extjs页面上传一个文件到服务器。我可以使用简单的HTML页面到servlet,但是使用extjs (v4.0.7),当我解析请求时,我不会在servlet中获取文件。Servlet可以识别多部分页面,但是调用中没有提供任何内容。有人能告诉我我的代码做错了什么吗?

EXTJS代码:

代码语言:javascript
复制
var fileName = Ext.getCmp("fileName").getValue();

Ext.Ajax.request({
    url : 'UploadServlet',
    method: 'POST',  
    headers: {'Content-Type': 'multipart/form-data'},
    params :{
       'fileName': fileName.trim()
    },

    success: function ( result, request ) {
        resultData = result.responseText;
    },
    failure: function ( result, request ) {
        resultData = result.responseText;
    }   
});

Servlet代码:

代码语言:javascript
复制
protected void doPost(HttpServletRequest request,HttpServletResponse response)
        throws ServletException, IOException {  

    .......

     // Check that we have a file upload request
      isMultipart = ServletFileUpload.isMultipartContent(request);
      response.setContentType("text/html");
      java.io.PrintWriter out = response.getWriter( );
      if( !isMultipart ){
          // display no file attached error
         return;
      }

      // Create a factory for disk-based file items
      DiskFileItemFactory factory = new DiskFileItemFactory();
      // maximum size that will be stored in memory
      factory.setSizeThreshold(maxMemSize);
      // Location to save data that is larger than maxMemSize.
      factory.setRepository(new File(tempDir));

      // Create a new file upload handler
      ServletFileUpload upload = new ServletFileUpload(factory);
      // maximum file size to be uploaded.
      upload.setSizeMax( maxFileSize );


      try{ 
          // Parse the request to get file items.

      ////// fileItems is empty, 
              ////nothing is comming from extjs page/////////
          List<FileItem> fileItems = upload.parseRequest(request);

          // Process the uploaded file items
          Iterator<FileItem> i = fileItems.iterator();

          while ( i.hasNext () ) {                
             FileItem fi = (FileItem)i.next();

             if ( !fi.isFormField () ) {
                // Get the uploaded file parameters
                String fieldName = fi.getFieldName();
                String fileName = fi.getName();
                String contentType = fi.getContentType();
                boolean isInMemory = fi.isInMemory();
                long sizeInBytes = fi.getSize();

                // check if file exists
                File propFile = new File(tempDir, fileName.substring( fileName.lastIndexOf("\\")));
                if (!propFile.exists()) {  
                    // Write the file
                    if( fileName.lastIndexOf("\\") >= 0 ){
                       file = new File(tempDir + 
                       fileName.substring( fileName.lastIndexOf("\\"))) ;
                    }else{
                       file = new File(  tempDir + 
                       fileName.substring(fileName.lastIndexOf("\\")+1)) ;
                    }   
                    //InputStream uploadedStream = fi.getInputStream();
                    fi.write( file ) ;
                    out.println("Uploaded Filename: " + fileName + "  is in " + filePath + "<br>");
                } 

                ..... 
             }
          }
EN

回答 1

Stack Overflow用户

发布于 2013-06-11 23:52:25

你不能用AJAX上传文件。

不过,Ext的Ajax可以模仿它。请参阅request方法。您必须使用formisUpload选项。

但是,由于您无论如何都必须使用表单,所以您应该查看Ext.form.field.Field (如文档中所建议的那样,查看Ext.form.Basic.hasUpload;这将使您更好地理解文件上传的问题)。

编辑:--实际上,HTML5和XMLHttpRequest 2级增加了对文件上传的支持。但是,在Ext中处理它的方式并没有改变。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17055532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档