关于图片上传,服务端到第三方系统生成图片文件打不开的问题

pttzwjzy
   2017-01-10 16:16:57发布 0收藏, 122浏览
ExMobi服务端技术
已解决
悬赏10
0

服务端代码:

<% 

 //通过aa.req.getAttachBody("photo")来直接获取附件字节数组

 byte[] b1 = aa.req.getAttachBody("photo");

 

 JSONObject jsonObject = new JSONObject();

 jsonObject.put("img_byte", new String(b1));

 %>

第三方接收以及生成图片文件代码:

 public String uploadImg(String jsonObject) {

        log.info("\n调用uploadImg接口,参数:" jsonObject);

        ResultVO result = new ResultVO();

        result.setGXSJ(CoplatUtil.getSysTime());

        try {

            JSONObject objJson = JSONObject.fromObject(jsonObject);

            Map<String, Object> params = new HashMap<String, Object>();

            params.put("img_byte", objJson.getString("img_byte"));

            String str = objJson.getString("img_byte");

            savePicToFile("add_pic.png", str);

            /*

             * List<Map<String, Object>> list = employAndDepartChioseFacade.searchEmployAndDepartInfoCustom(params); result.setList(list);

             */

        } catch (Exception e) {

            log.error(e.getMessage());

            result.setResultCode(CoplatConstants.RESULT_CODE_ERR);

            result.setErrorDesc(e.getMessage());

        }

        JSONObject json = JSONObject.fromObject(result);

        return json.toString();

    }

    

    public String savePicToFile(String picName, String picData) throws IOException {

        String fileUrl = "D:\\tmp\\pic\\" picName;

        File outputFile = new File(fileUrl);

        FileOutputStream outputFileStream = null;

        try {

            outputFileStream = new FileOutputStream(outputFile);

            outputFileStream.write(picData.getBytes());

        } catch (FileNotFoundException e) {

            e.printStackTrace();

        } catch (IOException e) {

            e.printStackTrace();

        } finally {

            try {

                if (outputFileStream != null) {

                    outputFileStream.close();

                }

            } catch (IOException e) {

                e.printStackTrace();

            }

        }

        return fileUrl;

    }

服务端代码:

<% 

 //通过aa.req.getAttachBody("photo")来直接获取附件字节数组

 byte[] b1 = aa.req.getAttachBody("photo");

 

 JSONObject jsonObject = new JSONObject();

 jsonObject.put("img_byte", new String(b1));

 %>

<aa:http id="ws" url="http://127.0.0.1:8088/web/service/employAndDepartChioseService" method="post">

    <aa:header name="Content-Type" value="text/xml;charset=UTF-8"/>

    <aa:content>

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://server.webservice.jlzzzc.sproc.comtop.com/">

  <soapenv:Header/>

  <soapenv:Body>

     <ser:uploadImg>

        <!--入参-->

        <arg0><%=jsonObject.toString() %></arg0>

     </ser:uploadImg>

  </soapenv:Body>

</soapenv:Envelope>

    </aa:content>

</aa:http>

提问者追加   2017-01-10 16:41:48

直连请求代码:

function submitPic(){

var url = $config() "/imgUploadServer";

var ajaxData = {};

var data1 = {};

//普通参数

data1.type = 0;

data1.name = "username";

data1.value = "Miss Hu";

//附件参数

var data2 = {};

data2.type = 1;

data2.name = "photo";

data2.value = "res:image/all_people.png";

var arrayData = new Array();

arrayData.push(data1);

arrayData.push(data2);

ajaxData.data = arrayData;

ajaxData.method = "POST";

ajaxData.isBlock = true;

ajaxData.url = url;

ajaxData.successFunction = "testDirectFormSubmitSuccessCallBack";

ajaxData.failFunction = "testDirectFormSubmitFailCallBack";

var ajax = new DirectFormSubmit(ajaxData);

ajax.send();

}

function testDirectFormSubmitSuccessCallBack(ajax) {

alert(JSON.stringify(ajax.responseText));

//alert("上传附件成功!");

}

function testDirectFormSubmitFailCallBack(ajax) {

alert(ajax.objName "请求失败,错误码:" ajax.status);

}

提问者追加   2017-01-10 16:49:52

1个回答

并没有看到你的服务端代码最终朝业务系统接口提交数据的部分;

接口的概念是什么? 接口是提供者与调用者实现约定好的固定的请求参数、响应体、请求地址的服务;

那么你在exmobi服务端的jsp里最终朝业务系统接口提交的数据,是否符合业务系统接口的要求呢?

zhangyihui11@fiberhome
    2017-01-10 16:33:29回答
  • 已补充!
    pttzwjzy 2017-01-10 16:43:49评论
  • 你有没有注意图片格式的问题,你的业务系统接口方法内直接写死了文件名是png格式图片,那客户端提交的图片是是png的吗?
    zhangyihui11@fiberhome 2017-01-10 16:52:58评论
  • 这个可以百分之百确定! 我还把生成文件的代码 放到服务端的JSP里面,直接用接收到的byte数组去生成文件,那样是可以生成并能打开! 调用第三方接口之后,能生成,但是打不开 !
    pttzwjzy 2017-01-10 17:07:12评论
  • 你在exmobi服务端jsp把最终拼好的json字符串打印出来,copy下,贴到soapUi工具里,在soapUi工具里请求webservice接口测试下
    zhangyihui11@fiberhome 2017-01-10 17:21:09评论
  • 问题 解决了!  文件字节数组在服务端不能直接tostring,需要用JAVA自带的编码类进行编码后变成String才行,exmobi 平台提供的编码,只能传String,问题点其实就在byte[] 转字符串
    pttzwjzy 2017-01-12 10:20:13评论
提交评论

我要回答