去掉文件流inputStream中被加入的请求头信息

近期在项目中发现,request.getInputStream()接收到的文件流中自带请求头信息,如果不对接收到的文件流进行处理,直接将文件流写入到硬盘上则会出现下面这种情况

文件流中会带有请求头信息,这些请求头信息对正常的下载预览打开是没有问题,在用户端也看不出来,但是涉及到第三方系统对接过程中,要实现在线预览,对方系统对这些字符就没法处理,这个时候问题就出来了。

第三方:你们接收文件的时候为啥要把头信息加进去?

我方:我们的文件没有问题,通过其他工具都可以打开,这个是你们要去处理的

皮球一直飞.....

要解决这个问题去掉文件流中请求头信息,可以通过下一下这段代码来解决

//附件上传
public String getSaveOfdFilePath(@QueryParam("fileId") String fileId, @QueryParam("summaryId") String summaryId) {
    try {
        Log.info("数科轻阅读服务器接收文件:fileId=" + fileId);
        Log.info("数科轻阅读服务器接收公文Id:summaryId=" + summaryId);
        String uploadPath = fileManager.getFolder(new Date(), true);
        if (uploadPath.indexOf("upload") != -1) {
            uploadPath = uploadPath.substring(0, uploadPath.indexOf("upload"));
            uploadPath += "upload" + File.separator + "skReader" + File.separator + summaryId;
            Log.info("M3数科轻阅读上传正文目录:--------------------" + uploadPath);
        }
        File file = new File(uploadPath);
        if (!file.exists() || !file.isDirectory()) {
            file.mkdirs();
        }
        String ofdUrl = uploadPath + File.separator + fileId + ".ofd";
        Log.info("正文保存位置:-------------" + ofdUrl);
        PrintWriter writer = response.getWriter();
        DiskFileItemFactory factory = new DiskFileItemFactory();
        factory.setSizeThreshold(1 *1024 * 1024);
        ServletFileUpload upload = new ServletFileUpload(factory);
        String charset = request.getCharacterEncoding();
        if (charset == null)
            charset = "UTF-8";
        upload.setHeaderEncoding(charset);
        List<FileItem> items = upload.parseRequest(request);
        if ((items == null) || items.isEmpty())
        {
            Log.info("附件为空!");
            return "file is null";
        }
        FileItem fi = null;
        for (FileItem item : items)
        {
            if (!item.isFormField())
            {
                fi = item;
                break;
            }
        }
        File toTargetFile = new File(ofdUrl);
        if (fi != null)
        {
            if (fi instanceof DiskFileItem)
            {
                DiskFileItem dfi = (DiskFileItem)fi;
                if (dfi.isInMemory())
                {
                    byte[] b = dfi.get();
                    FileUtils.writeByteArrayToFile(toTargetFile, b);
                }
                else
                {
                    File in = dfi.getStoreLocation();
                    FileUtils.copyFile(in, toTargetFile);
                }
            }
            else
            {
                fi.write(toTargetFile);
            }
            toTargetFile.setLastModified(System.currentTimeMillis());
            writer.write("success");
            writer.flush();
        }
        /*InputStream inputStream = request.getInputStream();
        if (inputStream != null) {
            Log.info("数科轻阅读服务器接收文件:数据流 inputStream");
            writeToLocal(ofdUrl, inputStream);
        }*/
    } catch (IOException e) {
        Log.error("将正文上传到upload失败", e);
    } catch (BusinessException e) {
        Log.error("获取上传文件位置失败", e);
    }  catch (Exception e) {
        Log.error("上传文件失败",e);
    }
    return "";
}

解决问题,如图:

 没有请求头信息了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值