打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
如何使用multipart / form-data发布ajax调用?

我需要通过AJAX调用将文件从extjs页面上传到服务器.我可以用简单的HTML页面来实现它,但是使用extjs(v4.0.7)我在解析请求时没有在我的servlet中获取文件. Servlet识别多部分页面,但呼叫没有任何附件.谁能告诉我我的代码中出错了什么?

EXTJS代码:

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代码:

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>");                }                 .....              }          }

解决方法:

您无法使用AJAX上传文件.

Ext的Ajax可以模仿它.请参阅doc of the request方法.您必须使用表单和isUpload选项.

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

编辑:事实上,HTML5 and XMLHttpRequest Level 2增加了对文件上传的支持.但是,不会改变你在Ext中处理它的方式.

来源:https://www.icode9.com/content-4-409801.html
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
通过 http 协议上传文件
Web基础了解版12-上传下载
解决当FORM的ENCTYPE="multipart/form-data" 时reques...
PHP文件上传源码分析
jQuery Ajax uploader plugin (with progress ba...
jatarta fileupload 实例
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服