1

我正在尝试将附件上传到zendesk。从您必须使用的 API 文档中

 curl -u username:password -H "Content-Type: application/binary" \
--data-binary @file.dat -X POST \
"https://helpdesk.zendesk.com/api/v2/uploads.json?filename=myfile.dat&token=                       {optional_token}"

我正在尝试用 java 做同样的事情。我可以上传文件并接收正确的 json 响应。但是,如果我在 zendesk 服务器上打开文件,则无法识别该文件。如果我从命令行使用 curl 上传相同的文件,一切正常。我在这里做错了什么?这是我用来上传文件的java代码。

public static void main(String[] args) throws IOException {
    File file = new File("C:\\Users\\user\\Documents\\zendesk2\\Zendesk\\src\\main\\resources\\scrat.jpg");
    try {
        MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
        multipartEntity.addPart("filename", new StringBody(file.getName()));
        FileBody fileBody = new FileBody(file, "application/octet-stream");
        multipartEntity.addPart("attachment", fileBody);

        // -u admin:password
        Credentials credentials = new UsernamePasswordCredentials("username", "passw");
        DefaultHttpClient httpClient = new DefaultHttpClient();
        httpClient.getCredentialsProvider().setCredentials(AuthScope.ANY, credentials);

        // -X POST
        HttpPost httpPost = new HttpPost("https://testserver.zendesk.com/api/v2/uploads.json");

        // @ - absolute path
        httpPost.setEntity(multipartEntity);

        // process response
        HttpResponse response = httpClient.execute(httpPost);

        HttpEntity resEntity = response.getEntity();

        if (resEntity != null) {
            long len = resEntity.getContentLength();
            if (len != -1 && len < 2048) {
// this result is being parsed with gson....
                System.out.println(EntityUtils.toString(resEntity));
            } else {
                // Stream content out
            }
        }

        httpClient.getConnectionManager().shutdown();

    } catch (Exception e) {
        //-f, fail silently}

    }
}
4

2 回答 2

2

我一直在为 Zendesk 开发 Java 客户端

您可以使用当前0.0.3-SNAPSHOT版本的代码上传附件。我可能会在不久的将来添加更多功能。

以下是 API 当前工作方式的一些示例代码:

ZenDesk zd = new ZenDesk.Builder("https://{{your domain}}.zendesk.com")
        .setUsername("...")
        .setToken("...") // or .setPassword("...")
        .build();

byte[] contents = new byte[file.length()];
FileInputStream fis = new FileInputStream(fis);
fis.read(contents);
fis.close();

Attachment.Upload upload = zd.createUpload(file.getName(), "application/binary", contents);

zd.close();

希望这会有所帮助(请注意,上面的示例代码并未针对异常进行整理,但应该为您提供 API 工作的基本方式)。

于 2013-04-05T21:44:03.573 回答
0

我知道这是旧的,但我花了一段时间才弄清楚如何做到这一点,我想分享。

  1. 要将文件附加到工单,需要 3 个步骤。如果一张票不存在,则创建一张票(我知道,这应该很明显)并获取票号。
  2. 为您的特定文件类型等创建上传,这将返回带有令牌属性的上传。
  3. 通过使用包含单个令牌列表的注释引用票证 ID 来更新票证。

Ticket ticket = zd.createTicket(ticket); Attachment.Upload upload = zd.createUpload(fileName, "application/binary", content); List tokens = new ArrayList<>(); tokens.add(upload.getToken()); Comment comment = new Comment(); comment.setBody("My upload"); comment.setTokenks(tokens); Ticket ticket = new Ticket(); ticket.setId(ticketId); ticket.setComment(comment); zd.upateTicket(ticket);

于 2017-05-21T00:05:27.897 回答