Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/cplusplus11/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中正确更改http请求的内容类型?_Java_Request - Fatal编程技术网

如何在Java中正确更改http请求的内容类型?

如何在Java中正确更改http请求的内容类型?,java,request,Java,Request,我使用以下代码上载servicenow API的附件: public static void main(String[] args) { try { //Add needed headers Header header = new BasicHeader(HttpHeaders.CONTENT_TYPE, "image/jpeg"); Header header2 = new Bas

我使用以下代码上载servicenow API的附件:

public static void main(String[] args) {
  try {

                  //Add needed headers
                  Header header = new BasicHeader(HttpHeaders.CONTENT_TYPE, "image/jpeg");
                  Header header2 = new BasicHeader(HttpHeaders.ACCEPT, "application/json");
                  List<Header> headers = new ArrayList<Header>();
                  headers.add(header);
                  headers.add(header2);

                  //Add credential
              CredentialsProvider provider = new BasicCredentialsProvider();
                  UsernamePasswordCredentials credentials     = new UsernamePasswordCredentials("yourUserName", "yourPassword");
                  provider.setCredentials(AuthScope.ANY, credentials);
                  CloseableHttpClient client = HttpClientBuilder.create()
                                                                          .setDefaultCredentialsProvider(provider)
                                                                          .setDefaultHeaders(headers)
                                                                          .build();

                  HttpPost post = new HttpPost("https://yourInstanceName/api/now/attachment/file?table_name=incident&table_sys_id=c8c3ba6643333a4073a1433e0210c706&file_name=Tulips.jpg");
                  String textFileName = "C:/Users/Public/Pictures/Sample Pictures/Tulips.jpg";
                  byte[] fileBytes = getBytes(textFileName);
                  post.setEntity(new ByteArrayEntity(fileBytes));
                  ResponseHandler<String> responseHandler=new BasicResponseHandler();
                  String responseBody = client.execute(post, responseHandler);
                  System.out.println(responseBody);
            } catch (Exception e) {

  e.printStackTrace();

}
  }

  private static byte[] getBytes(String filepath) throws Exception{
                  File file = new File(filepath);
                  //init array with file length
                  byte[] bytesArray = new byte[(int) file.length()];

                  FileInputStream fis = new FileInputStream(file);
                  fis.read(bytesArray); //read file into bytes[]
                  fis.close();

                  return bytesArray;
          }
publicstaticvoidmain(字符串[]args){
试一试{
//添加所需的标题
Header Header=新的基本阅读器(HttpHeaders.CONTENT_TYPE,“image/jpeg”);
Header header2=新的BasicHeader(HttpHeaders.ACCEPT,“application/json”);
列表标题=新建ArrayList();
headers.add(header);
标题。添加(标题2);
//添加凭证
CredentialsProvider=new BasicCredentialsProvider();
UsernamePasswordCredentials凭据=新的UsernamePasswordCredentials(“您的用户名”、“您的密码”);
provider.setCredentials(AuthScope.ANY,credentials);
CloseableHttpClient客户端=HttpClientBuilder.create()
.setDefaultCredentialsProvider(提供程序)
.setDefaultHeaders(标题)
.build();
HttpPost=新的HttpPost(“https://yourInstanceName/api/now/attachment/file?table_name=incident&table_sys_id=c8c3ba6643333a4073a1433e0210c706&file_name=Tulips.jpg");
String textFileName=“C:/Users/Public/Pictures/Sample Pictures/Tulips.jpg”;
byte[]fileBytes=getBytes(textFileName);
post.setEntity(新的ByteArrayEntity(fileBytes));
ResponseHandler ResponseHandler=新BasicResponseHandler();
字符串responseBody=client.execute(post,responseHandler);
系统输出打印LN(响应库);
}捕获(例外e){
e、 printStackTrace();
}
}
私有静态字节[]getBytes(字符串文件路径)引发异常{
文件文件=新文件(文件路径);
//具有文件长度的init数组
byte[]bytesArray=新字节[(int)file.length()];
FileInputStream fis=新的FileInputStream(文件);
读取(字节数组);//将文件读入字节[]
fis.close();
返回字节数组;
}
这就像它应该工作,但当我试图上传一个csv文件,它不工作

我用csv更改了文件,更改了url中的文件名,并将内容类型更改为“text/csv”


如果要上传文件,我应该更改哪些内容才能使其生效?

您的请求具有另一种内容类型,因此您必须使用多部分请求。见

一点也不。我们正处在RESTAPI时代,浏览器过去的工作方式已经过时。它不能像现在这样工作,不能用于jpeg或任何东西。你只是被引导去相信它可能会起作用,因为有时它会任意地做需要的事情。但代码根本不正确。一个正确的代码将始终完成所需的工作,而不是偶然地任意完成。getBytes()方法不会读取文件的所有字节。jpeg可能对此没有问题,并且有点损坏。大多数文件格式都会被破坏,无法修复。你能帮我找到一个好方法使其正确吗?我可以使用IOUtils.toByteArray而不是read吗?正在尝试。我需要对此做出一个完整的响应,如果我做出完整的响应,我必须检查您的代码的其余部分是否符合它的要求。需要一些时间。同时,您最好检查如何读取二进制文件。我编辑了我的comment.IOUtils.toByteArray就可以了。但是Java的原生文件.readAllBytes()也是如此。IOUTIL是为过时的Java版本制作的。