【问题标题】:Upload XLSX or ZIP file using Apache CXF corrupts the file使用 Apache CXF 上传 XLSX 或 ZIP 文件会损坏文件
【发布时间】:2017-11-23 02:05:07
【问题描述】:

我正在尝试上传 XLSX 文件,但文件到达服务器后会损坏

好文件 „N�c�A�wo]6�9)} "r��F1����6��a8�E�p�,��i����9J��~�6ʒ�2���y�b���ɵz`���E�� 没关系。

错误文件(上传后) „N�c�A�wo]6�9)} "r��F1����6��a8�E�p�,�i����9J��~�6ʒ�2���y�b���ɵz`���E�ne�

客户端JS上传这个文件

var formData = new FormData();
formData.append('file',$('input[type=file]')[0].files[0]);
            
      $.ajax({  url:  'upload',
                data: formData,
                type: 'POST',
                enctype: "multipart/form-data",
                processData: false
            });

在服务器端使用 apache CXF

@POST
  @Path("/upload")
  @Consumes(MediaType.MULTIPART_FORM_DATA)
    public void upload (@Multipart("file") Attachment attachment){
    
     InputStream inputStream = attachment.getDataHandler().getInputStream();
      File targetFile = new File("D://test.xlsx");
      OutputStream outStream = new FileOutputStream(targetFile);
      int read = 0;
      byte[] bytes = new byte[1024];
      while ((read = inputStream.read(bytes)) != -1)
      {
        outStream.write(bytes, 0, read);
      }            
      outStream.close();
    }

【问题讨论】:

  • 由于您显示的服务器数据文件的格式非常糟糕,很难分辨。但它看起来像一个编码问题。您的服务器端 java 代码不管理编码。 'D:' 可能与 Windows 和默认编码 Windows-1252 有关。这可能与您浏览器的 UT8 编码相差甚远。
  • 为了让 IE 工作,客户端代码应该将 contentType 设置为 false

标签: javascript java spring-mvc cxf multipartform-data


【解决方案1】:
  1. CXF 没有问题
  2. JS 库没有问题
  3. 我们有一个转换器可以进行编码,所以从@Galigator 的上述评论可以看出这是一个编码问题

【讨论】:

    猜你喜欢
    • 2014-02-25
    • 2021-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多