Salesforceに直接画像表示方法(uploadなし)

『data:image/gif;base64,~~~』形式のデータ(dataスキーム)を生成します。
画像ファイルなどのバイナリデータを Base64 エンコードに変換しています。
data スキーマでは、外部ファイルへのアクセスなしにスクリプト内で完結して画像を表示できるため、
小さなアイコンなどの表示には便利です。

例:

「R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==」画像ファイルからBase64 Encode後の内容
JavaなどLocalからSalesforceへ送信する場合、先にBase64Encodeして、送信する

注意:画像のサイズ制限があります

Javaの例:

public class UploadFileToSalesforce {
private Properties prop = null;
public UploadFileToSalesforce(Properties properties) {
prop = properties;
}
// ファイルを取得して、
public int uploadImgToSaleforce() throws Exception {

// image file path
String inFilePath = prop.getProperty(“ftp.recivePath_1”);
File inPutFile = new File(inFilePath);
//SObject[] updFilesList = null;
List<SObject> updFilesList = null;
try {
if (inPutFile.isDirectory()) {

// 存在するファイルは全部Salesforceにアップロードする
//updFilesList = new SObject[inPutFile.list().length];
updFilesList = new ArrayList<SObject>();
//int index = 0;
for (String fileName : inPutFile.list()) {
File updFild = new File(inFilePath + fileName);
String fileExtent = fileName.substring(fileName.lastIndexOf(“.”) + 1, fileName.length());
System.out.println(fileExtent);
if (“tif”.equals(fileExtent.toLowerCase())) {
String tiffFileName = updFild.getAbsolutePath();
fileExtent = “jpeg”;
String jpegFileName = tiffFileName + “.” + fileExtent;
TiffUtils.TiffToJpg(updFild.getAbsolutePath(), jpegFileName);
updFild = new File(jpegFileName);

}
FileInputStream fi = new FileInputStream(updFild);
byte[] indata = new byte[(int) updFild.length()];
System.out.println(updFild.length());
fi.read(indata);
fi.close();
EMSMANAGER__c item = new EMSMANAGER__c();
//item.setName(String.valueOf(System.nanoTime()));
String imageContent = org.apache.commons.codec.binary.Base64.encodeBase64String(indata);
String data = “data:image/” + fileExtent + “;base64,” + imageContent;
item.setFileContent__c(“<img alt='” + fileName +”‘ src='” + data + “‘ width=’500px’>”);
// updFilesList[index] = item;
updFilesList.add(item);
//index++;

if (updFilesList.size() % 20 == 0) {
SObject[] updObjList = new SObject[20];
for (int i = 0; i < updFilesList.size(); i++) {
updObjList[i] = updFilesList.get(i);
}
saveFileToSfdc(updObjList);
updFilesList.clear();
}
}
if (!updFilesList.isEmpty()) {
SObject[] updObjList = new SObject[20];
for (int i = 0; i < updFilesList.size(); i++) {
updObjList[i] = updFilesList.get(i);
}
saveFileToSfdc(updObjList);
updFilesList.clear();
}
}
} catch (Exception e) {
e.printStackTrace();
}

return 0;
}

public void saveFileToSfdc(SObject[] updFilesList) throws DataGemException, ConnectionException {
// 一ファイル位置レコードにSalesforceにアップロードする
if (updFilesList != null && updFilesList.length > 0) {
// Salesforceに接続する
SalesforceUtil sfHandle = new SalesforceUtil(prop);
sfHandle.connnectSFDC();
SaveResult[] saveRsList = sfHandle.getHandle().create(updFilesList);
for (SaveResult rs: saveRsList) {
System.out.println(“————-” + rs.getSuccess());
com.sforce.soap.enterprise.Error[] errs = rs.getErrors();
for (com.sforce.soap.enterprise.Error err: errs) {
System.out.print(err.getMessage());
}
}
}
}

}

———————————————–
SalesforceのApex側直接の作成

String img = 'data:image/jpeg;base64,' + 'xxxxbase64文字列';
Sobjectxxx item1 = new Sobjectxxx ();
item1.Name = xxxxxxxxxxxxx;
item1.TextareaFieldxxx = '<img src="' + img + '" />';
insert item1;

—————————-java tool ——————–

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.io.IOUtils;

public class ImageBase64 {
public static void main(String[] args) throws IOException {
ImageBase64 ImageBase64 = new ImageBase64();
ImageBase64.encodeBase64();
}

private void encodeBase64() throws IOException {
File file = new File(“/Users/elegant/Workspaces/Sample/src/rtaImage.jpg”);
InputStream inputStream = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(inputStream);
String base64 = new String(Base64.encodeBase64(IOUtils.toByteArray(bis)));

System.out.println(base64);

}
}

コメントを残す

メールアドレスが公開されることはありません。