0
내 애플리케이션에 Salesforce를 통합하려고합니다. 내 애플리케이션에 Chatter 피드를 표시해야하며이 과정에서 Chatter Rest API의 모든 기능을 수행했습니다 (게시, 데이터 가져 오기, 댓글, 좋아요 등). 채터 API에 첨부 파일을 업로드 할 수 없습니다.이미지 또는 첨부 파일을 Salesforce 채터 레스트에 업로드 할 수 없습니다.
나는 다음 링크상의 한 :
How do I upload file using Salesforce Mobile SDK for android? 내 코드 :
private void postImageAsAttachment(String parentId, String title,String filepath) {
Map<String, Object> fields = new HashMap<String, Object>();
fields.put("Name", title);
fields.put("ParentID", "The user id");
File file=new File(filepath);
fields.put("Body", encodeFileInBase64(file));
fields.put("ContentType", "image/jpeg");
RestRequest request = null;
try {
request = RestRequest.getRequestForCreate(getString(R.string.api_version), "Attachment", fields);
System.out.println("Request File:"+request);
} catch (Exception ex) {
Log.d(TAG, "sendRequest: ", ex);
Toast.makeText(MyNewsFeed.this, "The file upload failed: " + ex.toString(), Toast.LENGTH_LONG).show();
}
client.sendAsync(request, new RestClient.AsyncRequestCallback() {
@Override
public void onSuccess(RestRequest request, RestResponse result) {
try {
//Do something with JSON result.
// System.out.println("Restresponse--->"+result);
println(result); //Use our helper function, to print our JSON response.
} catch (Exception e) {
e.printStackTrace();
}
EventsObservable.get().notifyEvent(EventsObservable.EventType.RenditionComplete);
}
@Override
public void onError(Exception e) {
e.printStackTrace();
EventsObservable.get().notifyEvent(EventsObservable.EventType.RenditionComplete);
}
});
}
내가에서이 메서드를 호출하고파일 경로를 가져온 후을 Chatter에서 업로드하려고합니다.
다음 방법 은 Base64로에 이미지를 인코딩 :이 오류는이 때 이해
BasicNetwork.performRequest: Unexpected response code 400 for https://ap2.salesforce.com/services/data/v36.0/sobjects/Attachment
07-25 18:41:39.176 26386-26386/com.salesforce.th W/System.err: com.android.volley.ServerError
07-25 18:41:39.176 26386-26386/com.salesforce.th W/System.err: at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:179)
07-25 18:41:39.177 26386-26386/com.salesforce.th W/System.err: at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:114)
: 나는 방법을 실행할 때마다 나에게 오류를 제공
private String encodeFileInBase64(File file) {
String fileTxt="";
StringBuilder sb = new StringBuilder();
// StringBuilder sbStr = new StringBuilder((int) (file.length()/3 *
// 8));
FileInputStream fin = null;
try {
fin = new FileInputStream(file);
int bSize = 3000; // 3 * 512;
Log.v("fileLength", String.valueOf(file.length()));
byte[] buf = new byte[bSize];
int len = 0;
while ((len = fin.read(buf)) != -1) {
Log.v("len", String.valueOf(len));// sbStr.append(new
// String(buf, 0, len));
byte[] encoded = Base64.encode(buf, Base64.DEFAULT);
sb.append(new String(encoded, 0, len));
}
Log.v("txtFileWithBuffer", sb.toString());
fin.close();
} catch (IOException e) {
if (null != fin) {
try {
fin.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
String base64EncodedFile = sb.toString();
FileInputStream fileInputStream = null;
byte[] bFile = new byte[(int) base64EncodedFile.length()];
try {
fileInputStream = new FileInputStream(base64EncodedFile);
fileInputStream.read(bFile);
fileInputStream.close();
fileTxt = Base64.encodeToString(bFile, Base64.DEFAULT);
Log.v("txtFileWithoutBuffer", fileTxt);
return fileTxt;
// encodeImgList.add(encodedImage);
} catch (Exception ex) {
ex.printStackTrace();
return "";
}
// return base64EncodedFile;
}
return fileTxt;
}
변형 된 XML 또는 JSON 본문입니다.하지만 여기서 내가 잘못하고있는 것을 발견하지 못했습니다.
내가 여기에없는 것을 이해할 수 없습니다. 도와주세요.
예 내가 의도적으로 여기에 대신 실제 사용자 ID의를 통해 "사용자 ID"를 썼다 고요, 변수 parentId해야
입니다났습니다. – kgandroid