zxlwenku 2019-06-24 15:13
浏览 257

图片上传一直文件损坏,字符集编码也设置了,哪位大神知道什么问题

上传图片损坏,上传txt文件中如果存在中文就会乱码

前端代码

<HTML>
<HEAD>
    <title>上传文件</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</HEAD>
   <body>
     <div>
     <form action="http://192.168.7.69:8080/biz-orange/DN/doctorService/uploadImage" accept-charset="utf-8" method="post" enctype="multipart/form-data">
             <input
                type="file" value="上传" name="file" /> <br /> <input type="submit"
                value="生成" id="bu" />
        </form>


     </div>
   </body>
</html>

Java 上传文件

 @POST
    @Path("/uploadImage")
    @Produces("multipart/form-data; charset=UTF-8")
    public String uploadImage(@Context HttpServletRequest request) {
        ResBody< Map<String,String>> resBody = new ResBody<>();
        try {
            FileItemFactory factory = new DiskFileItemFactory();
            ServletFileUpload upload = new ServletFileUpload(factory);
            upload.setFileSizeMax(4194304*10L); //2M
            upload.setHeaderEncoding("UTF-8");
            //创建文件存储临时目录

            List<FileItem> items = upload.parseRequest(request);

            if(items != null && !items.isEmpty()){
                for (FileItem fileItem : items) {
                    System.out.println(fileItem);
                    System.out.println(fileItem.getFieldName());

                    String filename=fileItem.getName();
                    String filepath=tempDir+File.separator+filename;

                    System.out.println("文件保存路径为:"+filepath);

                    File file=new File(filepath);
//                    fileItem.write(file);

                    InputStream inputSteam= fileItem.getInputStream();

                    System.out.println(inputSteam.available());

                    FileOutputStream out = new FileOutputStream(filepath);

                    //创建一个缓冲区
                    byte buffer[] = new byte[1024];
                    //判断输入流中的数据是否已经读完的标识
                    int len = 0;
                    //循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据
                    while((len=inputSteam.read(buffer))>0){
                        //使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath + "\\" + filename)当中
                        out.write(buffer, 0, len);
                    }

                    //关闭输入流
                    inputSteam.close();
                    out.close();

                    System.out.println("文件:"+filename+"上传成功!");
                    //保存至fastdfs

                    resBody.setRetCode(ResponseCode.REQUEST_SUCCESS);
                    resBody.setRetDesc("SUCCESS");
                }
            }
            System.out.println("上传文件成功!");

        } catch (Exception e) {
            e.printStackTrace();
            resBody.setRetCode(ResponseCode.DEFALUT_ERROR);
            resBody.setRetDesc(ResponseCode.CODE_RET_DESC);
            logger.error(e);
        }

        return JSONObject.toJSONString(resBody);
    }
  • 写回答

0条回答

    报告相同问题?

    悬赏问题

    • ¥15 如何实验stm32主通道和互补通道独立输出
    • ¥30 这是哪个作者做的宝宝起名网站
    • ¥60 版本过低apk如何修改可以兼容新的安卓系统
    • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
    • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
    • ¥50 有数据,怎么用matlab求全要素生产率
    • ¥15 TI的insta-spin例程
    • ¥15 完成下列问题完成下列问题
    • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
    • ¥15 YoloV5 第三方库的版本对照问题