java通过http发送图像得到的工作没有效果

时间:2014-11-18 20:37:06

标签: java string encode http-get

我尝试使用http get请求将png发送到服务器。我使用下面的代码来实现。
字符串编码(在客户端上):

byte[] bytes = Files.readAllBytes(Paths.get(chosenFile.getPath()));
String image = new String(bytes, "ISO-8859-1");

然后我使用String镜像向服务器发送http get请求。 服务器接收它但我得到的图像与我发送的图像不一样(我无法打开我收到的图像)。我使用URLEncoder.encode(image, "ISO-8859-1")为http get请求编码url。当我使用URLEncoder.encode(image, "UTF-8")时,同样的情况也会发生。

为什么这不起作用? 有没有更好的办法做这种事情?

UPD#0

发送图片的代码:

private void jMenuItem5ActionPerformed(java.awt.event.ActionEvent evt) {                                           
    JFileChooser chooser= new JFileChooser();
    int choice = chooser.showOpenDialog(this);

    if (choice != JFileChooser.APPROVE_OPTION) return;
        File chosenFile = chooser.getSelectedFile();

    try {
        byte[] bytes = Files.readAllBytes(Paths.get(chosenFile.getPath()));
        String image = new String(bytes, "ISO-8859-1");

        if(image != null){
            boolean allsent = false;
            long k = 0;
            String query = "0";
            while(!allsent){
                String s = image;
                String send = "";
                long q;
                if(k+400>image.length()){
                    q=image.length();
                    allsent=true;
                }
                else q = k+400;
                for(long i=k;i<q;i++)
                    send+=s.charAt((int) i);
                System.out.println(send);
                String response = new HTTP().GET(Constants.ADDRESS_ADDIMAGE
                        + "?" + Constants.USERNAME + "=" + URLEncoder.encode(user, "UTF-8")
                        + "&" + Constants.IMAGE + "=" + URLEncoder.encode(send, "ISO-8859-1")
                        + "&" + Constants.QUERY + "=" + URLEncoder.encode(query, "UTF-8"));
                k+=400;
                query="1";                            
            }
        }
    } catch (IOException ex) {
        ex.printStackTrace();
    }

}

注意: HTTP()。GET()调用标准的http get。

UPD#1 服务器代码

@GET
@Path("/addimage")
@Produces(MediaType.APPLICATION_JSON)
public String addImage(@QueryParam("username") String uname, @QueryParam("image") String image, @QueryParam("query") String query) {       
    if(query.equals("0")){
        String s = image;
        JDBC.addImage("ABase", "MarketLogin", "image", uname, s);
    }
    else{
        String s = JDBC.selectDB("ABase", "MarketLogin", "image", uname, "username") + image;
        JDBC.addImage("ABase", "MarketLogin", "image", uname, s);
    }
    return "1";
}

注意: JDBC是用于更新mysql DB的类。服务器期望由ISO-8859-1编码的字符串。

1 个答案:

答案 0 :(得分:1)

如何使用HttpURLConnection并发送字节而不是字符串。

HttpURLConnection connection;
ByteArrayOutputStream baos;
try {
    URL url = new URL("http://www.somewebsite.com");
    connection = (HttpURLConnection) url.openConnection();
    connection.setDoOutput(true);
    connection.setRequestProperty("Content-Type", "image/jpeg");
    connection.setRequestMethod("POST");

    baos = new ByteArrayOutputStream();
    baos.write(bytes); // your bytes here         
    baos.writeTo(connection.getOutputStream());
}
finally {
    if(baos != null)
       baos.close();
    if(osw != null)
       osw.close();
    if(connection != null)
       connection.disconnect();
}