解决openStack API镜像上传问题

1、通过HttpPut调用glance接口/v2/image/{image_id}/file
2、设置头Content_Type为application/octet-stream
3、设置 httpPut.setEntity(new ByteArrayEntity(file.getBytes()));
4、学习httpClient二进制流上传文件 https://blog.csdn.net/p312011150/article/details/78064380
HttpClient 3.x

public class HttpHelper {  
    String m_url;  
    HttpClient m_HttpClient;  
  
    public HttpHelper(String url) {  
        m_url = url;  
        m_HttpClient = new HttpClient();  
    }  
  
    public byte[] post(byte[] bytes, String contentType) throws IOException {  
        PostMethod method = new PostMethod(m_url);  
  
        if ((contentType != null) && (contentType.length() > 0))  
            method.setRequestHeader("Content-type" , contentType);  
        method.setRequestEntity(new ByteArrayRequestEntity(bytes));  
        int HttpCode = m_HttpClient.executeMethod(method);  
        if (HttpCode != HttpStatus.SC_OK)  
            throw new IOException("Invalid HttpStatus: " + HttpCode);  
        InputStream respStream = method.getResponseBodyAsStream();  
        int respBodySize = respStream.available();  
        if (respBodySize <= 0)  
            throw new IOException("Invalid respBodySize: " + respBodySize);  
        byte[] respBuffer = new byte[respBodySize];  
        if (respStream.read(respBuffer) != respBodySize)  
            throw new IOException("Read respBody Error");  
        return respBuffer;  
    }  
  
    public String postXml(String str) throws IOException {  
        byte[] reqBuffer = str.getBytes(Charset.forName("UTF-8"));  
        byte[] respBuffer = post(reqBuffer, "application/xml; charset=UTF-8");  
        String resp = new String(respBuffer, Charset.forName("UTF-8"));  
        return resp;  
    }  
}  

HttpClient 4.x

public class HttpHelper {  
    CloseableHttpClient m_HttpClient;  


public HttpHelper() {  
    m_HttpClient = HttpClients.createDefault();  
}  

// send bytes and recv bytes  
public byte[] post(String url, byte[] bytes, String contentType) throws IOException {  
    HttpPost httpPost = new HttpPost(url);  
    httpPost.setEntity(new ByteArrayEntity(bytes));  
    if (contentType != null)  
        httpPost.setHeader("Content-type", contentType);  
    CloseableHttpResponse httpResponse = m_HttpClient.execute(httpPost);  
    try {  
        HttpEntity entityResponse = httpResponse.getEntity();  
        int contentLength = (int) entityResponse.getContentLength();  
        if (contentLength <= 0)  
            throw new IOException("No response");  
        byte[] respBuffer = new byte[contentLength];  
        if (entityResponse.getContent().read(respBuffer) != respBuffer.length)  
            throw new IOException("Read response buffer error");  
        return respBuffer;  
    } finally {  
        httpResponse.close();  
    }  
}  

public byte[] post(String url, byte[] bytes) throws IOException {  
    return post(url, bytes, null);  
}  

public String postXml(String url, String str) throws IOException {  
    byte[] reqBuffer = str.getBytes(Charset.forName("UTF-8"));  
    byte[] respBuffer = post(url, reqBuffer, "application/xml; charset=UTF-8");  
    String resp = new String(respBuffer, Charset.forName("UTF-8"));  
    return resp;  
}  

}

你可能感兴趣的:(openStack,Api,镜像上传问题,openstack,java,springBoot)