2016-10-03 68 views
0

我生成了这个Postman代码片段,并希望在Talend中使用它,但我不知道如何设置文件名,以便它从本地驱动器。下面是代码:OkHttpClient - 如何设置“[object Object]”到本地文件

OkHttpClient client = new OkHttpClient(); 

File sourceFile = new File("/Users/secret/Desktop/temp/16-27513/Digital Storefront Receipt.png"); 

MediaType mediaType = MediaType.parse("multipart/form-data; boundary=---011000010111000001101001"); 
RequestBody body = RequestBody.create(mediaType, "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"uploadedFile\"; filename=\"[object Object]\"\r\nContent-Type: false\r\n\r\n\r\n-----011000010111000001101001--"); 
Request request = new Request.Builder() 
    .url("https://secret.attask-ondemand.com/attask/api-internal/upload/?apiKey=secret") 
    .post(body) 
    .addHeader("content-type", "multipart/form-data; boundary=---011000010111000001101001") 
    .addHeader("cache-control", "no-cache") 
    .build(); 

Response response = client.newCall(request).execute(); 
String json = response.body().string(); 
System.out.println(json.toString()); 

这是本地文件我想的翻译:引用:“/用户/秘密/桌面/温度/ 16-27513 /数字店面Receipt.png”

一直咀嚼几个小时,没有运气。任何帮助深表感谢。

+0

这是否编译?如果是这样,当你运行它会发生什么? –

+0

它的确如此。由于该文件没有添加到RequestBody中,该文章仅创建一个没有文件的shell。 –

+0

这是后的结果:{ “数据”:{ “把柄”:“811bc97b1d16493e9e7caea123f06b7b” } } –

回答

0

感谢您的帮助BrianPipa。特别是对于Workfront,表单键必须是“uploadedFile”,并且该值需要与引用的文件匹配。使用MultipartBody,与使用字符串相比,构建请求主体更容易。最终代码:

File sourceFile = new File("/Users/secret/Desktop/temp/16-27513/Digital Storefront Receipt.png"); 

final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png"); 

RequestBody body = new MultipartBody.Builder() 
        .setType(MultipartBody.FORM)          
        .addFormDataPart("uploadedFile", "Digital Storefront Receipt.png", RequestBody.create(MEDIA_TYPE_PNG ,sourceFile)) 
        .build(); 

Request request = new Request.Builder() 
    .url("https://secret.attask-ondemand.com/attask/api-internal/upload/?apiKey=secret") 
    .post(body) 
    .addHeader("content-type", "multipart/form-data; boundary=---011000010111000001101001") 
    .addHeader("cache-control", "no-cache") 
    .build(); 

OkHttpClient client = new OkHttpClient(); 

Response response = client.newCall(request).execute(); 
String json = response.body().string(); 
System.out.println(json.toString()); 
相关问题