mirror of
https://github.com/chatopera/cosin.git
synced 2025-08-01 16:38:02 +08:00
#116 store image and file into mysql
This commit is contained in:
parent
97ac1ce890
commit
892e85b033
@ -36,6 +36,7 @@ import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;
|
||||
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
|
||||
import org.springframework.scheduling.annotation.EnableAsync;
|
||||
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
||||
|
||||
import javax.servlet.MultipartConfigElement;
|
||||
import java.io.IOException;
|
||||
@ -44,6 +45,7 @@ import java.io.IOException;
|
||||
@EnableJpaRepositories("com.chatopera.cc.app.persistence.repository")
|
||||
@EnableElasticsearchRepositories("com.chatopera.cc.app.persistence.es")
|
||||
@EnableAsync
|
||||
@EnableTransactionManagement
|
||||
public class Application {
|
||||
|
||||
@Value("${web.upload-path}")
|
||||
|
@ -766,14 +766,14 @@ public class MainUtils {
|
||||
return workintTime;
|
||||
}
|
||||
|
||||
public static File processImage(File destFile, File imageFile) throws FileNotFoundException, IOException {
|
||||
public static File processImage(final File destFile, final File imageFile) throws FileNotFoundException, IOException {
|
||||
if (imageFile != null && imageFile.exists()) {
|
||||
Thumbnails.of(imageFile).width(460).keepAspectRatio(true).toFile(destFile);
|
||||
}
|
||||
return destFile;
|
||||
}
|
||||
|
||||
public static File scaleImage(File destFile, File imageFile, float quality) throws FileNotFoundException, IOException {
|
||||
public static File scaleImage(final File destFile, final File imageFile, float quality) throws FileNotFoundException, IOException {
|
||||
if (imageFile != null && imageFile.exists()) {
|
||||
Thumbnails.of(imageFile).scale(1f).outputQuality(quality).toFile(destFile);
|
||||
}
|
||||
@ -846,45 +846,6 @@ public class MainUtils {
|
||||
return execute;
|
||||
}
|
||||
|
||||
public static void processAttachmentFile(MultipartFile[] files, AttachmentRepository attachementRes, String path, User user, String orgi, WorkOrders workOrders, HttpServletRequest request, String dataid, String modelid) throws IOException {
|
||||
if (files != null && files.length > 0) {
|
||||
workOrders.setAnonymous(true);//变更用途为是否有 附件
|
||||
//保存附件
|
||||
for (MultipartFile file : files) {
|
||||
if (file.getSize() > 0) { //文件尺寸 限制 ?在 启动 配置中 设置 的最大值,其他地方不做限制
|
||||
String fileid = MainUtils.md5(file.getBytes()); //使用 文件的 MD5作为 ID,避免重复上传大文件
|
||||
if (!StringUtils.isBlank(fileid)) {
|
||||
AttachmentFile attachmentFile = new AttachmentFile();
|
||||
attachmentFile.setCreater(user.getId());
|
||||
attachmentFile.setOrgi(orgi);
|
||||
attachmentFile.setOrgan(user.getOrgan());
|
||||
attachmentFile.setDataid(dataid);
|
||||
attachmentFile.setModelid(modelid);
|
||||
attachmentFile.setModel(MainContext.ModelType.WORKORDERS.toString());
|
||||
attachmentFile.setFilelength((int) file.getSize());
|
||||
if (file.getContentType() != null && file.getContentType().length() > 255) {
|
||||
attachmentFile.setFiletype(file.getContentType().substring(0, 255));
|
||||
} else {
|
||||
attachmentFile.setFiletype(file.getContentType());
|
||||
}
|
||||
if (file.getOriginalFilename() != null && file.getOriginalFilename().length() > 255) {
|
||||
attachmentFile.setTitle(file.getOriginalFilename().substring(0, 255));
|
||||
} else {
|
||||
attachmentFile.setTitle(file.getOriginalFilename());
|
||||
}
|
||||
if (!StringUtils.isBlank(attachmentFile.getFiletype()) && attachmentFile.getFiletype().indexOf("image") >= 0) {
|
||||
attachmentFile.setImage(true);
|
||||
}
|
||||
attachmentFile.setFileid(fileid);
|
||||
attachementRes.save(attachmentFile);
|
||||
FileUtils.writeByteArrayToFile(new File(path, "upload/" + fileid), file.getBytes());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取系统配置
|
||||
*
|
||||
|
@ -25,15 +25,13 @@ import com.chatopera.cc.app.im.client.NettyClients;
|
||||
import com.chatopera.cc.app.im.message.ChatMessage;
|
||||
import com.chatopera.cc.app.im.router.OutMessageRouter;
|
||||
import com.chatopera.cc.app.model.*;
|
||||
import com.chatopera.cc.app.persistence.blob.JpaBlobHelper;
|
||||
import com.chatopera.cc.app.persistence.es.ContactsRepository;
|
||||
import com.chatopera.cc.app.persistence.es.QuickReplyRepository;
|
||||
import com.chatopera.cc.app.persistence.repository.*;
|
||||
import com.chatopera.cc.exception.CSKefuException;
|
||||
import com.chatopera.cc.exchange.DataExchangeInterface;
|
||||
import com.chatopera.cc.util.Menu;
|
||||
import com.chatopera.cc.util.OnlineUserUtils;
|
||||
import com.chatopera.cc.util.PinYinTools;
|
||||
import com.chatopera.cc.util.PropertiesEventUtils;
|
||||
import com.chatopera.cc.util.*;
|
||||
import com.chatopera.cc.util.mobile.MobileAddress;
|
||||
import com.chatopera.cc.util.mobile.MobileNumberUtils;
|
||||
import freemarker.template.TemplateException;
|
||||
@ -149,6 +147,12 @@ public class AgentController extends Handler {
|
||||
@Autowired
|
||||
private ConsultInviteRepository inviteRepository;
|
||||
|
||||
@Autowired
|
||||
private StreamingFileRepository streamingFileRepository;
|
||||
|
||||
@Autowired
|
||||
private JpaBlobHelper jpaBlobHelper;
|
||||
|
||||
@Value("${web.upload-path}")
|
||||
private String path;
|
||||
|
||||
@ -169,7 +173,7 @@ public class AgentController extends Handler {
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!StringUtils.isBlank(sort)) {
|
||||
if (StringUtils.isNotBlank(sort)) {
|
||||
List<Order> list = new ArrayList<Order>();
|
||||
if (sort.equals("lastmessage")) {
|
||||
list.add(new Order(Direction.DESC, "status"));
|
||||
@ -208,7 +212,7 @@ public class AgentController extends Handler {
|
||||
agentUser = (AgentUser) agentUserList.get(0);
|
||||
view.addObject("curagentuser", agentUser);
|
||||
view.addObject("inviteData", OnlineUserUtils.cousult(agentUser.getAppid(), agentUser.getOrgi(), inviteRepository));
|
||||
if (!StringUtils.isBlank(agentUser.getAgentserviceid())) {
|
||||
if (StringUtils.isNotBlank(agentUser.getAgentserviceid())) {
|
||||
List<AgentServiceSummary> summarizes = this.serviceSummaryRes.findByAgentserviceidAndOrgi(agentUser.getAgentserviceid(), super.getOrgi(request));
|
||||
if (summarizes.size() > 0) {
|
||||
view.addObject("summary", summarizes.get(0));
|
||||
@ -217,7 +221,7 @@ public class AgentController extends Handler {
|
||||
|
||||
view.addObject("agentUserMessageList", this.chatMessageRepository.findByUsessionAndOrgi(agentUser.getUserid(), super.getOrgi(request), new PageRequest(0, 20, Direction.DESC, "updatetime")));
|
||||
AgentService agentService = null;
|
||||
if (!StringUtils.isBlank(agentUser.getAgentserviceid())) {
|
||||
if (StringUtils.isNotBlank(agentUser.getAgentserviceid())) {
|
||||
agentService = this.agentServiceRepository.findOne(agentUser.getAgentserviceid());
|
||||
view.addObject("curAgentService", agentService);
|
||||
|
||||
@ -247,10 +251,10 @@ public class AgentController extends Handler {
|
||||
view.addObject("onlineUser", onlineUser);
|
||||
}
|
||||
} else if (MainContext.ChannelTypeEnum.PHONE.toString().equals(agentUser.getChannel())) {
|
||||
if (agentService != null && !StringUtils.isBlank(agentService.getOwner())) {
|
||||
if (agentService != null && StringUtils.isNotBlank(agentService.getOwner())) {
|
||||
StatusEvent statusEvent = this.statusEventRes.findById(agentService.getOwner());
|
||||
if (statusEvent != null) {
|
||||
if (!StringUtils.isBlank(statusEvent.getHostid())) {
|
||||
if (StringUtils.isNotBlank(statusEvent.getHostid())) {
|
||||
PbxHost pbxHost = pbxHostRes.findById(statusEvent.getHostid());
|
||||
view.addObject("pbxHost", pbxHost);
|
||||
}
|
||||
@ -302,19 +306,19 @@ public class AgentController extends Handler {
|
||||
)
|
||||
);
|
||||
|
||||
if (!StringUtils.isBlank(agentService.getAppid())) {
|
||||
if (StringUtils.isNotBlank(agentService.getAppid())) {
|
||||
map.addAttribute("snsAccount", snsAccountRes.findBySnsidAndOrgi(agentService.getAppid(), super.getOrgi(request)));
|
||||
}
|
||||
List<AgentUserContacts> relaList = agentUserContactsRes.findByUseridAndOrgi(agentService.getUserid(), agentService.getOrgi());
|
||||
if (relaList.size() > 0) {
|
||||
AgentUserContacts agentUserContacts = relaList.get(0);
|
||||
if (MainContext.model.get("contacts") != null && !StringUtils.isBlank(agentUserContacts.getContactsid())) {
|
||||
if (MainContext.model.get("contacts") != null && StringUtils.isNotBlank(agentUserContacts.getContactsid())) {
|
||||
DataExchangeInterface dataExchange = (DataExchangeInterface) MainContext.getContext().getBean("contacts");
|
||||
if (dataExchange != null) {
|
||||
map.addAttribute("contacts", dataExchange.getDataByIdAndOrgi(agentUserContacts.getContactsid(), super.getOrgi(request)));
|
||||
}
|
||||
}
|
||||
if (MainContext.model.get("workorders") != null && !StringUtils.isBlank(agentUserContacts.getContactsid())) {
|
||||
if (MainContext.model.get("workorders") != null && StringUtils.isNotBlank(agentUserContacts.getContactsid())) {
|
||||
DataExchangeInterface dataExchange = (DataExchangeInterface) MainContext.getContext().getBean("workorders");
|
||||
if (dataExchange != null) {
|
||||
map.addAttribute("workOrdersList", dataExchange.getListDataByIdAndOrgi(agentUserContacts.getContactsid(), super.getUser(request).getId(), super.getOrgi(request)));
|
||||
@ -346,7 +350,7 @@ public class AgentController extends Handler {
|
||||
agentUserTaskRes.save(agentUserTask);
|
||||
}
|
||||
|
||||
if (!StringUtils.isBlank(agentUser.getAgentserviceid())) {
|
||||
if (StringUtils.isNotBlank(agentUser.getAgentserviceid())) {
|
||||
List<AgentServiceSummary> summarizes = this.serviceSummaryRes.findByAgentserviceidAndOrgi(agentUser.getAgentserviceid(), super.getOrgi(request));
|
||||
if (summarizes.size() > 0) {
|
||||
view.addObject("summary", summarizes.get(0));
|
||||
@ -355,7 +359,7 @@ public class AgentController extends Handler {
|
||||
|
||||
view.addObject("agentUserMessageList", this.chatMessageRepository.findByUsessionAndOrgi(agentUser.getUserid(), super.getOrgi(request), new PageRequest(0, 20, Direction.DESC, "updatetime")));
|
||||
AgentService agentService = null;
|
||||
if (!StringUtils.isBlank(agentUser.getAgentserviceid())) {
|
||||
if (StringUtils.isNotBlank(agentUser.getAgentserviceid())) {
|
||||
agentService = this.agentServiceRepository.findOne(agentUser.getAgentserviceid());
|
||||
view.addObject("curAgentService", agentService);
|
||||
if (agentService != null) {
|
||||
@ -385,10 +389,10 @@ public class AgentController extends Handler {
|
||||
view.addObject("onlineUser", onlineUser);
|
||||
}
|
||||
} else if (MainContext.ChannelTypeEnum.PHONE.toString().equals(agentUser.getChannel())) {
|
||||
if (agentService != null && !StringUtils.isBlank(agentService.getOwner())) {
|
||||
if (agentService != null && StringUtils.isNotBlank(agentService.getOwner())) {
|
||||
StatusEvent statusEvent = this.statusEventRes.findById(agentService.getOwner());
|
||||
if (statusEvent != null) {
|
||||
if (!StringUtils.isBlank(statusEvent.getHostid())) {
|
||||
if (StringUtils.isNotBlank(statusEvent.getHostid())) {
|
||||
PbxHost pbxHost = pbxHostRes.findById(statusEvent.getHostid());
|
||||
view.addObject("pbxHost", pbxHost);
|
||||
}
|
||||
@ -455,7 +459,7 @@ public class AgentController extends Handler {
|
||||
@RequestMapping("/workorders/list")
|
||||
@Menu(type = "apps", subtype = "workorderslist")
|
||||
public ModelAndView workorderslist(HttpServletRequest request, String contactsid, ModelMap map) {
|
||||
if (MainContext.model.get("workorders") != null && !StringUtils.isBlank(contactsid)) {
|
||||
if (MainContext.model.get("workorders") != null && StringUtils.isNotBlank(contactsid)) {
|
||||
DataExchangeInterface dataExchange = (DataExchangeInterface) MainContext.getContext().getBean("workorders");
|
||||
if (dataExchange != null) {
|
||||
map.addAttribute("workOrdersList", dataExchange.getListDataByIdAndOrgi(contactsid, super.getUser(request).getId(), super.getOrgi(request)));
|
||||
@ -481,7 +485,7 @@ public class AgentController extends Handler {
|
||||
agentStatus.setAgentno(user.getId());
|
||||
agentStatus.setLogindate(new Date());
|
||||
|
||||
if (!StringUtils.isBlank(user.getOrgan())) {
|
||||
if (StringUtils.isNotBlank(user.getOrgan())) {
|
||||
Organ organ = organRes.findByIdAndOrgi(user.getOrgan(), super.getOrgiByTenantshare(request));
|
||||
if (organ != null && organ.isSkill()) {
|
||||
agentStatus.setSkill(organ.getId());
|
||||
@ -589,7 +593,7 @@ public class AgentController extends Handler {
|
||||
AgentUser agentUser = agentUserRepository.findByIdAndOrgi(userid, super.getOrgi(request));
|
||||
if (agentUser != null && super.getUser(request).getId().equals(agentUser.getAgentno())) {
|
||||
AutomaticServiceDist.deleteAgentUser(agentUser, super.getOrgi(request));
|
||||
if (!StringUtils.isBlank(agentUser.getAgentserviceid())) {
|
||||
if (StringUtils.isNotBlank(agentUser.getAgentserviceid())) {
|
||||
AgentService agentService = agentServiceRepository.findByIdAndOrgi(agentUser.getAgentserviceid(), super.getOrgi(request));
|
||||
agentService.setStatus(MainContext.AgentUserStatusEnum.END.toString());
|
||||
agentServiceRepository.save(agentService);
|
||||
@ -655,7 +659,7 @@ public class AgentController extends Handler {
|
||||
blackListRes.save(tempBlackEntiry);
|
||||
blackEntity = tempBlackEntiry;
|
||||
}
|
||||
if (!StringUtils.isBlank(userid)) {
|
||||
if (StringUtils.isNotBlank(userid)) {
|
||||
CacheHelper.getSystemCacheBean().put(userid, blackEntity, super.getOrgi(request));
|
||||
}
|
||||
}
|
||||
@ -681,58 +685,58 @@ public class AgentController extends Handler {
|
||||
|
||||
@RequestMapping("/image/upload")
|
||||
@Menu(type = "im", subtype = "image", access = false)
|
||||
public ModelAndView upload(ModelMap map, HttpServletRequest request, @RequestParam(value = "imgFile", required = false) MultipartFile imgFile, @Valid String id, @Valid String paste) throws IOException {
|
||||
public ModelAndView upload(ModelMap map,
|
||||
HttpServletRequest request,
|
||||
@RequestParam(value = "imgFile", required = false) MultipartFile multipart,
|
||||
@Valid String id,
|
||||
@Valid String paste) throws IOException {
|
||||
ModelAndView view = request(super.createRequestPageTempletResponse("/apps/agent/upload"));
|
||||
UploadStatus upload = null;
|
||||
String fileName = null;
|
||||
if (imgFile != null && imgFile.getOriginalFilename().lastIndexOf(".") > 0) {
|
||||
UploadStatus notify = null;
|
||||
if (multipart != null && multipart.getOriginalFilename().lastIndexOf(".") > 0) {
|
||||
File uploadDir = new File(path, "upload");
|
||||
if (!uploadDir.exists()) {
|
||||
uploadDir.mkdirs();
|
||||
}
|
||||
String fileid = MainUtils.md5(imgFile.getBytes()), fileURL = null, targetFile = null;
|
||||
String fileid = MainUtils.getUUID();
|
||||
String fileURL = null;
|
||||
ChatMessage data = new ChatMessage();
|
||||
if (imgFile.getContentType() != null && imgFile.getContentType().indexOf("image") >= 0) {
|
||||
fileName = "upload/" + fileid + "_original";
|
||||
File imageFile = new File(path, fileName);
|
||||
FileCopyUtils.copy(imgFile.getBytes(), imageFile);
|
||||
targetFile = "upload/" + fileid;
|
||||
MainUtils.processImage(new File(path, targetFile), imageFile);
|
||||
StreamingFile sf = new StreamingFile();
|
||||
|
||||
|
||||
fileURL = "/res/image.html?id=" + targetFile;
|
||||
if (request.getServerPort() == 80) {
|
||||
fileURL = "/res/image.html?id=" + targetFile;
|
||||
} else {
|
||||
fileURL = "/res/image.html?id=" + targetFile;
|
||||
}
|
||||
upload = new UploadStatus("0", fileURL); //图片直接发送给 客户,不用返回
|
||||
data.setAttachmentid(fileid);
|
||||
if (multipart.getContentType() != null && multipart.getContentType().indexOf(Constants.ATTACHMENT_TYPE_IMAGE) >= 0) {
|
||||
// process thumbnail
|
||||
File original = new File(path, "upload/" + fileid + "_original");
|
||||
File thumbnail = new File(path, "upload/" + fileid);
|
||||
FileCopyUtils.copy(multipart.getBytes(), original);
|
||||
MainUtils.processImage(thumbnail, original);
|
||||
sf.setThumbnail(jpaBlobHelper.createBlobWithFile(thumbnail));
|
||||
fileURL = "/res/image.html?id=" + fileid;
|
||||
} else {
|
||||
String attachid = processAttachmentFile(imgFile, request);
|
||||
|
||||
upload = new UploadStatus("0", "/res/file.html?id=" + attachid);
|
||||
String attachid = processAttachmentFile(multipart, fileid, request);
|
||||
fileURL = "/res/file.html?id=" + attachid;
|
||||
if (request.getServerPort() == 80) {
|
||||
fileURL = "/res/file.html?id=" + attachid;
|
||||
} else {
|
||||
fileURL = "/res/file.html?id=" + attachid;
|
||||
}
|
||||
}
|
||||
data.setFilename(imgFile.getOriginalFilename());
|
||||
data.setFilesize((int) imgFile.getSize());
|
||||
|
||||
OutMessageRouter router = null;
|
||||
sf.setId(fileid);
|
||||
sf.setData(jpaBlobHelper.createBlob(multipart.getInputStream(), multipart.getSize()));
|
||||
sf.setName(multipart.getOriginalFilename());
|
||||
sf.setMime(multipart.getContentType());
|
||||
streamingFileRepository.save(sf);
|
||||
|
||||
data.setFilename(multipart.getOriginalFilename());
|
||||
data.setFilesize((int) multipart.getSize());
|
||||
data.setAttachmentid(fileid);
|
||||
|
||||
notify = new UploadStatus("0", fileURL);
|
||||
|
||||
AgentUser agentUser = agentUserRepository.findByIdAndOrgi(id, super.getOrgi(request));
|
||||
|
||||
if (agentUser != null && paste == null) {
|
||||
router = (OutMessageRouter) MainContext.getContext().getBean(agentUser.getChannel());
|
||||
if (agentUser != null && paste == null) { // 发送消息
|
||||
OutMessageRouter router = (OutMessageRouter) MainContext.getContext().getBean(agentUser.getChannel());
|
||||
MessageOutContent outMessage = new MessageOutContent();
|
||||
if (router != null) {
|
||||
if (router != null) { // 发送消息给访客
|
||||
outMessage.setMessage(fileURL);
|
||||
outMessage.setFilename(imgFile.getOriginalFilename());
|
||||
outMessage.setFilesize((int) imgFile.getSize());
|
||||
if (imgFile.getContentType() != null && imgFile.getContentType().indexOf("image") >= 0) {
|
||||
outMessage.setFilename(multipart.getOriginalFilename());
|
||||
outMessage.setFilesize((int) multipart.getSize());
|
||||
if (multipart.getContentType() != null && multipart.getContentType().indexOf(Constants.ATTACHMENT_TYPE_IMAGE) >= 0) {
|
||||
outMessage.setMessageType(MainContext.MediaTypeEnum.IMAGE.toString());
|
||||
data.setMsgtype(MainContext.MediaTypeEnum.IMAGE.toString());
|
||||
} else {
|
||||
@ -753,7 +757,7 @@ public class AgentController extends Handler {
|
||||
data.setAgentserviceid(agentUser.getAgentserviceid());
|
||||
|
||||
data.setCalltype(MainContext.CallTypeEnum.OUT.toString());
|
||||
if (!StringUtils.isBlank(agentUser.getAgentno())) {
|
||||
if (StringUtils.isNotBlank(agentUser.getAgentno())) {
|
||||
data.setTouser(agentUser.getUserid());
|
||||
}
|
||||
data.setChannel(agentUser.getChannel());
|
||||
@ -771,11 +775,10 @@ public class AgentController extends Handler {
|
||||
// 通知文件上传消息
|
||||
NettyClients.getInstance().publishAgentEventMessage(agentUser.getAgentno(), MainContext.MessageTypeEnum.MESSAGE.toString(), data);
|
||||
}
|
||||
|
||||
} else {
|
||||
upload = new UploadStatus("请选择图片文件");
|
||||
notify = new UploadStatus("请选择图片文件");
|
||||
}
|
||||
map.addAttribute("upload", upload);
|
||||
map.addAttribute("upload", notify);
|
||||
return view;
|
||||
}
|
||||
|
||||
@ -785,7 +788,7 @@ public class AgentController extends Handler {
|
||||
ChatMessage message = chatMessageRepository.findById(id);
|
||||
map.addAttribute("chatMessage", message);
|
||||
map.addAttribute("agentUser", CacheHelper.getAgentUserCacheBean().getCacheObject(message.getUserid(), message.getOrgi()));
|
||||
/*if(!StringUtils.isBlank(t)){
|
||||
/*if(StringUtils.isNotBlank(t)){
|
||||
map.addAttribute("t", t) ;
|
||||
}*/
|
||||
map.addAttribute("t", true);
|
||||
@ -794,22 +797,37 @@ public class AgentController extends Handler {
|
||||
|
||||
@RequestMapping("/message/image/upload")
|
||||
@Menu(type = "im", subtype = "image", access = false)
|
||||
public ModelAndView messageimage(ModelMap map, HttpServletRequest request, @RequestParam(value = "image", required = false) MultipartFile image, @Valid String id, @Valid String userid, @Valid String fileid) throws IOException {
|
||||
if (image != null && !StringUtils.isBlank(fileid)) {
|
||||
public ModelAndView messageimage(ModelMap map,
|
||||
HttpServletRequest request,
|
||||
@RequestParam(value = "image", required = false) MultipartFile image,
|
||||
@Valid String id,
|
||||
@Valid String userid,
|
||||
@Valid String fileid) throws IOException {
|
||||
logger.info("messageimage id {}, fileid {}", id, fileid);
|
||||
if (image != null && StringUtils.isNotBlank(fileid)) {
|
||||
File tempFile = File.createTempFile(fileid, ".png");
|
||||
try {
|
||||
String fileName = "upload/" + fileid + "_cooperation";
|
||||
File imageFile = new File(path, fileName);
|
||||
// 创建临时图片文件
|
||||
if (!tempFile.getParentFile().exists()) {
|
||||
tempFile.getParentFile().mkdirs();
|
||||
}
|
||||
// 写入临时文件
|
||||
FileCopyUtils.copy(image.getBytes(), tempFile);
|
||||
ChatMessage chatMessage = chatMessageRepository.findById(id);
|
||||
chatMessage.setCooperation(true);
|
||||
chatMessageRepository.save(chatMessage);
|
||||
|
||||
// 写入协作文件
|
||||
String fileName = "upload/" + fileid + "_cooperation";
|
||||
File imageFile = new File(path, fileName);
|
||||
MainUtils.scaleImage(imageFile, tempFile, 0.1F);
|
||||
|
||||
// 保存到数据库
|
||||
StreamingFile sf = streamingFileRepository.findOne(fileid);
|
||||
if (sf != null) {
|
||||
sf.setCooperation(jpaBlobHelper.createBlobWithFile(imageFile));
|
||||
streamingFileRepository.save(sf);
|
||||
}
|
||||
|
||||
OutMessageRouter router = null;
|
||||
AgentUser agentUser = (AgentUser) CacheHelper.getAgentUserCacheBean().getCacheObject(chatMessage.getUserid(), chatMessage.getOrgi());
|
||||
@ -818,7 +836,7 @@ public class AgentController extends Handler {
|
||||
router = (OutMessageRouter) MainContext.getContext().getBean(agentUser.getChannel());
|
||||
MessageOutContent outMessage = new MessageOutContent();
|
||||
if (router != null) {
|
||||
outMessage.setMessage("/res/image.html?id=" + fileName);
|
||||
outMessage.setMessage("/res/image.html?id=" + fileid + "&cooperation=true");
|
||||
outMessage.setFilename(imageFile.getName());
|
||||
|
||||
outMessage.setAttachmentid(chatMessage.getAttachmentid());
|
||||
@ -841,36 +859,33 @@ public class AgentController extends Handler {
|
||||
return request(super.createRequestPageTempletResponse("/public/success"));
|
||||
}
|
||||
|
||||
private String processAttachmentFile(MultipartFile file, HttpServletRequest request) throws IOException {
|
||||
private String processAttachmentFile(final MultipartFile multipart, final String fileid, HttpServletRequest request) throws IOException {
|
||||
String id = null;
|
||||
if (file.getSize() > 0) { //文件尺寸 限制 ?在 启动 配置中 设置 的最大值,其他地方不做限制
|
||||
String fileid = MainUtils.md5(file.getBytes()); //使用 文件的 MD5作为 ID,避免重复上传大文件
|
||||
if (StringUtils.isNotBlank(fileid)) {
|
||||
AttachmentFile attachmentFile = new AttachmentFile();
|
||||
attachmentFile.setCreater(super.getUser(request).getId());
|
||||
attachmentFile.setOrgi(super.getOrgi(request));
|
||||
attachmentFile.setOrgan(super.getUser(request).getOrgan());
|
||||
attachmentFile.setModel(MainContext.ModelType.WEBIM.toString());
|
||||
attachmentFile.setFilelength((int) file.getSize());
|
||||
if (file.getContentType() != null && file.getContentType().length() > 255) {
|
||||
attachmentFile.setFiletype(file.getContentType().substring(0, 255));
|
||||
} else {
|
||||
attachmentFile.setFiletype(file.getContentType());
|
||||
}
|
||||
File uploadFile = new File(file.getOriginalFilename());
|
||||
if (uploadFile.getName() != null && uploadFile.getName().length() > 255) {
|
||||
attachmentFile.setTitle(uploadFile.getName().substring(0, 255));
|
||||
} else {
|
||||
attachmentFile.setTitle(uploadFile.getName());
|
||||
}
|
||||
if (StringUtils.isNotBlank(attachmentFile.getFiletype()) && attachmentFile.getFiletype().indexOf("image") >= 0) {
|
||||
attachmentFile.setImage(true);
|
||||
}
|
||||
attachmentFile.setFileid(fileid);
|
||||
attachementRes.save(attachmentFile);
|
||||
FileUtils.writeByteArrayToFile(new File(path, "upload/" + fileid), file.getBytes());
|
||||
id = attachmentFile.getId();
|
||||
if (multipart.getSize() > 0) { //文件尺寸 限制 ?在 启动 配置中 设置 的最大值,其他地方不做限制
|
||||
AttachmentFile attachmentFile = new AttachmentFile();
|
||||
attachmentFile.setCreater(super.getUser(request).getId());
|
||||
attachmentFile.setOrgi(super.getOrgi(request));
|
||||
attachmentFile.setOrgan(super.getUser(request).getOrgan());
|
||||
attachmentFile.setModel(MainContext.ModelType.WEBIM.toString());
|
||||
attachmentFile.setFilelength((int) multipart.getSize());
|
||||
if (multipart.getContentType() != null && multipart.getContentType().length() > 255) {
|
||||
attachmentFile.setFiletype(multipart.getContentType().substring(0, 255));
|
||||
} else {
|
||||
attachmentFile.setFiletype(multipart.getContentType());
|
||||
}
|
||||
File uploadFile = new File(multipart.getOriginalFilename());
|
||||
if (uploadFile.getName() != null && uploadFile.getName().length() > 255) {
|
||||
attachmentFile.setTitle(uploadFile.getName().substring(0, 255));
|
||||
} else {
|
||||
attachmentFile.setTitle(uploadFile.getName());
|
||||
}
|
||||
if (StringUtils.isNotBlank(attachmentFile.getFiletype()) && attachmentFile.getFiletype().indexOf(Constants.ATTACHMENT_TYPE_IMAGE) >= 0) {
|
||||
attachmentFile.setImage(true);
|
||||
}
|
||||
attachmentFile.setFileid(fileid);
|
||||
attachementRes.save(attachmentFile);
|
||||
FileUtils.writeByteArrayToFile(new File(path, "upload/" + fileid), multipart.getBytes());
|
||||
id = attachmentFile.getId();
|
||||
}
|
||||
return id;
|
||||
}
|
||||
@ -879,7 +894,7 @@ public class AgentController extends Handler {
|
||||
@RequestMapping(value = "/contacts")
|
||||
@Menu(type = "apps", subtype = "contacts")
|
||||
public ModelAndView contacts(ModelMap map, HttpServletRequest request, @Valid String contactsid, @Valid String userid, @Valid String agentserviceid, @Valid String agentuserid) {
|
||||
if (!StringUtils.isBlank(userid) && !StringUtils.isBlank(contactsid)) {
|
||||
if (StringUtils.isNotBlank(userid) && StringUtils.isNotBlank(contactsid)) {
|
||||
List<OnlineUser> onlineUserList = this.onlineUserRes.findByUseridAndOrgi(userid, super.getOrgi(request));
|
||||
if (onlineUserList.size() > 0) {
|
||||
OnlineUser onlineUser = onlineUserList.get(0);
|
||||
@ -925,9 +940,9 @@ public class AgentController extends Handler {
|
||||
@Valid String agentserviceid,
|
||||
@Valid String agentuserid,
|
||||
@Valid String channel) {
|
||||
if (!StringUtils.isBlank(userid) && !StringUtils.isBlank(agentuserid)) {
|
||||
if (StringUtils.isNotBlank(userid) && StringUtils.isNotBlank(agentuserid)) {
|
||||
AgentUser agentUser = this.agentUserRepository.findByIdAndOrgi(agentuserid, super.getOrgi(request));
|
||||
if (agentUser != null && !StringUtils.isBlank(agentUser.getAgentserviceid())) {
|
||||
if (agentUser != null && StringUtils.isNotBlank(agentUser.getAgentserviceid())) {
|
||||
List<AgentServiceSummary> summaries = this.serviceSummaryRes.findByAgentserviceidAndOrgi(agentUser.getAgentserviceid(), super.getOrgi(request));
|
||||
if (summaries.size() > 0) {
|
||||
map.addAttribute("summary", summaries.get(0));
|
||||
@ -955,7 +970,7 @@ public class AgentController extends Handler {
|
||||
@Valid String agentserviceid,
|
||||
@Valid String agentuserid,
|
||||
@Valid String channel) {
|
||||
if (!StringUtils.isBlank(userid) && !StringUtils.isBlank(agentuserid)) {
|
||||
if (StringUtils.isNotBlank(userid) && StringUtils.isNotBlank(agentuserid)) {
|
||||
summary.setOrgi(super.getOrgi(request));
|
||||
summary.setCreater(super.getUser(request).getId());
|
||||
|
||||
@ -981,7 +996,7 @@ public class AgentController extends Handler {
|
||||
@RequestMapping(value = "/transfer")
|
||||
@Menu(type = "apps", subtype = "transfer")
|
||||
public ModelAndView transfer(ModelMap map, HttpServletRequest request, @Valid String userid, @Valid String agentserviceid, @Valid String agentuserid) {
|
||||
if (!StringUtils.isBlank(userid) && !StringUtils.isBlank(agentuserid)) {
|
||||
if (StringUtils.isNotBlank(userid) && StringUtils.isNotBlank(agentuserid)) {
|
||||
//map.addAttribute("organList", organRes.findByOrgiAndOrgid(super.getOrgi(request),super.getOrgid(request))) ;
|
||||
|
||||
List<Organ> skillList = OnlineUserUtils.organ(super.getOrgi(request), true);
|
||||
@ -1022,7 +1037,7 @@ public class AgentController extends Handler {
|
||||
@RequestMapping(value = "/transfer/agent")
|
||||
@Menu(type = "apps", subtype = "transferagent")
|
||||
public ModelAndView transferagent(ModelMap map, HttpServletRequest request, @Valid String organ) {
|
||||
if (!StringUtils.isBlank(organ)) {
|
||||
if (StringUtils.isNotBlank(organ)) {
|
||||
List<String> usersids = new ArrayList<String>();
|
||||
List<AgentStatus> agentStatusList = AutomaticServiceDist.getAgentStatus(organ, super.getOrgi(request));
|
||||
if (!agentStatusList.isEmpty()) {
|
||||
@ -1047,7 +1062,7 @@ public class AgentController extends Handler {
|
||||
@RequestMapping(value = "/transfer/save")
|
||||
@Menu(type = "apps", subtype = "transfersave")
|
||||
public ModelAndView transfersave(ModelMap map, HttpServletRequest request, @Valid String userid, @Valid String agentserviceid, @Valid String agentuserid, @Valid String agentno, @Valid String memo) {
|
||||
if (!StringUtils.isBlank(userid) && !StringUtils.isBlank(agentuserid) && !StringUtils.isBlank(agentno)) {
|
||||
if (StringUtils.isNotBlank(userid) && StringUtils.isNotBlank(agentuserid) && StringUtils.isNotBlank(agentno)) {
|
||||
AgentUser agentUser = (AgentUser) CacheHelper.getAgentUserCacheBean().getCacheObject(userid, super.getOrgi(request));
|
||||
AgentService agentService = this.agentServiceRepository.findByIdAndOrgi(agentserviceid, super.getOrgi(request));
|
||||
if (agentUser != null) {
|
||||
@ -1081,7 +1096,7 @@ public class AgentController extends Handler {
|
||||
|
||||
if (agentService != null) {
|
||||
agentService.setAgentno(agentno);
|
||||
if (!StringUtils.isBlank(memo)) {
|
||||
if (StringUtils.isNotBlank(memo)) {
|
||||
agentService.setTransmemo(memo);
|
||||
}
|
||||
agentService.setTrans(true);
|
||||
@ -1103,7 +1118,7 @@ public class AgentController extends Handler {
|
||||
quickTypeList.addAll(priQuickTypeList);
|
||||
map.addAttribute("pubQuickTypeList", quickTypeList);
|
||||
|
||||
if (!StringUtils.isBlank(typeid)) {
|
||||
if (StringUtils.isNotBlank(typeid)) {
|
||||
map.addAttribute("quickType", quickTypeRes.findByIdAndOrgi(typeid, super.getOrgi(request)));
|
||||
}
|
||||
|
||||
@ -1114,7 +1129,7 @@ public class AgentController extends Handler {
|
||||
@RequestMapping("/quickreply/add")
|
||||
@Menu(type = "setting", subtype = "quickreplyadd", admin = true)
|
||||
public ModelAndView quickreplyadd(ModelMap map, HttpServletRequest request, @Valid String parentid) {
|
||||
if (!StringUtils.isBlank(parentid)) {
|
||||
if (StringUtils.isNotBlank(parentid)) {
|
||||
map.addAttribute("quickType", quickTypeRes.findByIdAndOrgi(parentid, super.getOrgi(request)));
|
||||
}
|
||||
map.addAttribute("quickTypeList", quickTypeRes.findByOrgiAndQuicktypeAndCreater(super.getOrgi(request), MainContext.QuickTypeEnum.PRI.toString(), super.getUser(request).getId()));
|
||||
@ -1124,7 +1139,7 @@ public class AgentController extends Handler {
|
||||
@RequestMapping("/quickreply/save")
|
||||
@Menu(type = "setting", subtype = "quickreply", admin = true)
|
||||
public ModelAndView quickreplysave(ModelMap map, HttpServletRequest request, @Valid QuickReply quickReply) {
|
||||
if (!StringUtils.isBlank(quickReply.getTitle()) && !StringUtils.isBlank(quickReply.getContent())) {
|
||||
if (StringUtils.isNotBlank(quickReply.getTitle()) && StringUtils.isNotBlank(quickReply.getContent())) {
|
||||
quickReply.setOrgi(super.getOrgi(request));
|
||||
quickReply.setCreater(super.getUser(request).getId());
|
||||
quickReply.setType(MainContext.QuickTypeEnum.PRI.toString());
|
||||
@ -1158,7 +1173,7 @@ public class AgentController extends Handler {
|
||||
@RequestMapping("/quickreply/update")
|
||||
@Menu(type = "setting", subtype = "quickreply", admin = true)
|
||||
public ModelAndView quickreplyupdate(ModelMap map, HttpServletRequest request, @Valid QuickReply quickReply) {
|
||||
if (!StringUtils.isBlank(quickReply.getId())) {
|
||||
if (StringUtils.isNotBlank(quickReply.getId())) {
|
||||
QuickReply temp = quickReplyRes.findOne(quickReply.getId());
|
||||
quickReply.setOrgi(super.getOrgi(request));
|
||||
quickReply.setCreater(super.getUser(request).getId());
|
||||
@ -1175,7 +1190,7 @@ public class AgentController extends Handler {
|
||||
@Menu(type = "apps", subtype = "kbs")
|
||||
public ModelAndView addtype(ModelMap map, HttpServletRequest request, @Valid String typeid) {
|
||||
map.addAttribute("quickTypeList", quickTypeRes.findByOrgiAndQuicktypeAndCreater(super.getOrgi(request), MainContext.QuickTypeEnum.PRI.toString(), super.getUser(request).getId()));
|
||||
if (!StringUtils.isBlank(typeid)) {
|
||||
if (StringUtils.isNotBlank(typeid)) {
|
||||
map.addAttribute("quickType", quickTypeRes.findByIdAndOrgi(typeid, super.getOrgi(request)));
|
||||
}
|
||||
return request(super.createRequestPageTempletResponse("/apps/agent/quickreply/addtype"));
|
||||
|
@ -24,6 +24,7 @@ import com.chatopera.cc.app.cache.CacheHelper;
|
||||
import com.chatopera.cc.app.handler.Handler;
|
||||
import com.chatopera.cc.app.im.util.RichMediaUtils;
|
||||
import com.chatopera.cc.app.model.*;
|
||||
import com.chatopera.cc.app.persistence.blob.JpaBlobHelper;
|
||||
import com.chatopera.cc.app.persistence.es.ContactsRepository;
|
||||
import com.chatopera.cc.app.persistence.repository.*;
|
||||
import com.chatopera.cc.util.*;
|
||||
@ -78,6 +79,12 @@ public class IMController extends Handler {
|
||||
@Value("${web.upload-path}")
|
||||
private String path;
|
||||
|
||||
@Autowired
|
||||
private StreamingFileRepository streamingFileRepository;
|
||||
|
||||
@Autowired
|
||||
private JpaBlobHelper jpaBlobHelper;
|
||||
|
||||
@Autowired
|
||||
private ConsultInviteRepository inviteRepository;
|
||||
|
||||
@ -707,62 +714,76 @@ public class IMController extends Handler {
|
||||
|
||||
@RequestMapping("/image/upload")
|
||||
@Menu(type = "im", subtype = "image", access = true)
|
||||
public ModelAndView upload(ModelMap map, HttpServletRequest request, @RequestParam(value = "imgFile", required = false) MultipartFile imgFile, @Valid String channel, @Valid String userid, @Valid String username, @Valid String appid, @Valid String orgi, @Valid String paste) throws IOException {
|
||||
public ModelAndView upload(ModelMap map, HttpServletRequest request,
|
||||
@RequestParam(value = "imgFile", required = false) MultipartFile multipart,
|
||||
@Valid String channel,
|
||||
@Valid String userid,
|
||||
@Valid String username,
|
||||
@Valid String appid,
|
||||
@Valid String orgi,
|
||||
@Valid String paste) throws IOException {
|
||||
ModelAndView view = request(super.createRequestPageTempletResponse("/apps/im/upload"));
|
||||
UploadStatus upload = null;
|
||||
String fileName = null;
|
||||
if (imgFile != null
|
||||
&& imgFile.getOriginalFilename().lastIndexOf(".") > 0
|
||||
if (multipart != null
|
||||
&& multipart.getOriginalFilename().lastIndexOf(".") > 0
|
||||
&& StringUtils.isNotBlank(userid)) {
|
||||
File uploadDir = new File(path, "upload");
|
||||
if (!uploadDir.exists()) {
|
||||
uploadDir.mkdirs();
|
||||
}
|
||||
String fileid = MainUtils.md5(imgFile.getBytes());
|
||||
if (imgFile.getContentType() != null
|
||||
&& imgFile.getContentType().indexOf(Constants.ATTACHMENT_TYPE_IMAGE) >= 0) {
|
||||
|
||||
String fileid = MainUtils.getUUID();
|
||||
StreamingFile sf = new StreamingFile();
|
||||
sf.setId(fileid);
|
||||
sf.setName(multipart.getOriginalFilename());
|
||||
sf.setMime(multipart.getContentType());
|
||||
if (multipart.getContentType() != null
|
||||
&& multipart.getContentType().indexOf(Constants.ATTACHMENT_TYPE_IMAGE) >= 0) {
|
||||
// 检查文件格式
|
||||
String invalid = AttachementFormatValidator.getInstance().validate(Constants.ATTACHMENT_TYPE_IMAGE, imgFile.getOriginalFilename());
|
||||
String invalid = StreamingFileUtils.getInstance().validate(Constants.ATTACHMENT_TYPE_IMAGE, multipart.getOriginalFilename());
|
||||
if (invalid == null) {
|
||||
fileName = "upload/" + fileid + "_original";
|
||||
File imageFile = new File(path, fileName);
|
||||
FileCopyUtils.copy(imgFile.getBytes(), imageFile);
|
||||
FileCopyUtils.copy(multipart.getBytes(), imageFile);
|
||||
String thumbnailsFileName = "upload/" + fileid;
|
||||
MainUtils.processImage(new File(path, thumbnailsFileName), imageFile);
|
||||
File thumbnail = new File(path, thumbnailsFileName);
|
||||
MainUtils.processImage(thumbnail, imageFile);
|
||||
|
||||
// 存储数据库
|
||||
sf.setData(jpaBlobHelper.createBlob(multipart.getInputStream(), multipart.getSize()));
|
||||
sf.setThumbnail(jpaBlobHelper.createBlobWithFile(thumbnail));
|
||||
streamingFileRepository.save(sf);
|
||||
String fileUrl = "/res/image.html?id=" + fileid;
|
||||
upload = new UploadStatus("0", fileUrl);
|
||||
|
||||
upload = new UploadStatus("0", "/res/image.html?id=" + thumbnailsFileName);
|
||||
String image = "/res/image.html?id=" + thumbnailsFileName;
|
||||
if (request.getServerPort() == 80) {
|
||||
image = "/res/image.html?id=" + thumbnailsFileName;
|
||||
} else {
|
||||
image = "/res/image.html?id=" + thumbnailsFileName;
|
||||
}
|
||||
if (paste == null) {
|
||||
if (StringUtils.isNotBlank(channel)) {
|
||||
RichMediaUtils.uploadImageWithChannel(image, fileid, (int) imgFile.getSize(), imgFile.getName(), channel, userid, username, appid, orgi);
|
||||
RichMediaUtils.uploadImageWithChannel(fileUrl, fileid, (int) multipart.getSize(), multipart.getName(), channel, userid, username, appid, orgi);
|
||||
} else {
|
||||
RichMediaUtils.uploadImage(image, fileid, (int) imgFile.getSize(), imgFile.getName(), userid);
|
||||
RichMediaUtils.uploadImage(fileUrl, fileid, (int) multipart.getSize(), multipart.getName(), userid);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
upload = new UploadStatus(invalid);
|
||||
}
|
||||
} else {
|
||||
String invalid = AttachementFormatValidator.getInstance().validate(Constants.ATTACHMENT_TYPE_FILE, imgFile.getOriginalFilename());
|
||||
String invalid = StreamingFileUtils.getInstance().validate(Constants.ATTACHMENT_TYPE_FILE, multipart.getOriginalFilename());
|
||||
if (invalid == null) {
|
||||
String id = processAttachmentFile(imgFile, request);
|
||||
// 存储数据库
|
||||
sf.setData(jpaBlobHelper.createBlob(multipart.getInputStream(), multipart.getSize()));
|
||||
streamingFileRepository.save(sf);
|
||||
|
||||
// 存储到本地硬盘
|
||||
String id = processAttachmentFile(multipart, fileid, request);
|
||||
upload = new UploadStatus("0", "/res/file.html?id=" + id);
|
||||
String file = "/res/file.html?id=" + id;
|
||||
if (request.getServerPort() == 80) {
|
||||
file = "/res/file.html?id=" + id;
|
||||
} else {
|
||||
file = "/res/file.html?id=" + id;
|
||||
}
|
||||
File tempFile = new File(imgFile.getOriginalFilename());
|
||||
|
||||
File tempFile = new File(multipart.getOriginalFilename());
|
||||
if (StringUtils.isNotBlank(channel)) {
|
||||
RichMediaUtils.uploadFileWithChannel(file, (int) imgFile.getSize(), tempFile.getName(), channel, userid, username, appid, orgi, id);
|
||||
RichMediaUtils.uploadFileWithChannel(file, (int) multipart.getSize(), tempFile.getName(), channel, userid, username, appid, orgi, id);
|
||||
} else {
|
||||
RichMediaUtils.uploadFile(file, (int) imgFile.getSize(), tempFile.getName(), userid, id);
|
||||
RichMediaUtils.uploadFile(file, (int) multipart.getSize(), tempFile.getName(), userid, id);
|
||||
}
|
||||
} else {
|
||||
upload = new UploadStatus(invalid);
|
||||
@ -775,36 +796,33 @@ public class IMController extends Handler {
|
||||
return view;
|
||||
}
|
||||
|
||||
private String processAttachmentFile(MultipartFile file, HttpServletRequest request) throws IOException {
|
||||
private String processAttachmentFile(final MultipartFile file, final String fileid, HttpServletRequest request) throws IOException {
|
||||
String id = null;
|
||||
if (file.getSize() > 0) { //文件尺寸 限制 ?在 启动 配置中 设置 的最大值,其他地方不做限制
|
||||
String fileid = MainUtils.md5(file.getBytes()); //使用 文件的 MD5作为 ID,避免重复上传大文件
|
||||
if (StringUtils.isNotBlank(fileid)) {
|
||||
AttachmentFile attachmentFile = new AttachmentFile();
|
||||
attachmentFile.setCreater(super.getUser(request).getId());
|
||||
attachmentFile.setOrgi(super.getOrgi(request));
|
||||
attachmentFile.setOrgan(super.getUser(request).getOrgan());
|
||||
attachmentFile.setModel(MainContext.ModelType.WEBIM.toString());
|
||||
attachmentFile.setFilelength((int) file.getSize());
|
||||
if (file.getContentType() != null && file.getContentType().length() > 255) {
|
||||
attachmentFile.setFiletype(file.getContentType().substring(0, 255));
|
||||
} else {
|
||||
attachmentFile.setFiletype(file.getContentType());
|
||||
}
|
||||
File uploadFile = new File(file.getOriginalFilename());
|
||||
if (uploadFile.getName() != null && uploadFile.getName().length() > 255) {
|
||||
attachmentFile.setTitle(uploadFile.getName().substring(0, 255));
|
||||
} else {
|
||||
attachmentFile.setTitle(uploadFile.getName());
|
||||
}
|
||||
if (StringUtils.isNotBlank(attachmentFile.getFiletype()) && attachmentFile.getFiletype().indexOf("image") >= 0) {
|
||||
attachmentFile.setImage(true);
|
||||
}
|
||||
attachmentFile.setFileid(fileid);
|
||||
attachementRes.save(attachmentFile);
|
||||
FileUtils.writeByteArrayToFile(new File(path, "upload/" + fileid), file.getBytes());
|
||||
id = attachmentFile.getId();
|
||||
AttachmentFile attachmentFile = new AttachmentFile();
|
||||
attachmentFile.setCreater(super.getUser(request).getId());
|
||||
attachmentFile.setOrgi(super.getOrgi(request));
|
||||
attachmentFile.setOrgan(super.getUser(request).getOrgan());
|
||||
attachmentFile.setModel(MainContext.ModelType.WEBIM.toString());
|
||||
attachmentFile.setFilelength((int) file.getSize());
|
||||
if (file.getContentType() != null && file.getContentType().length() > 255) {
|
||||
attachmentFile.setFiletype(file.getContentType().substring(0, 255));
|
||||
} else {
|
||||
attachmentFile.setFiletype(file.getContentType());
|
||||
}
|
||||
File uploadFile = new File(file.getOriginalFilename());
|
||||
if (uploadFile.getName() != null && uploadFile.getName().length() > 255) {
|
||||
attachmentFile.setTitle(uploadFile.getName().substring(0, 255));
|
||||
} else {
|
||||
attachmentFile.setTitle(uploadFile.getName());
|
||||
}
|
||||
if (StringUtils.isNotBlank(attachmentFile.getFiletype()) && attachmentFile.getFiletype().indexOf("image") >= 0) {
|
||||
attachmentFile.setImage(true);
|
||||
}
|
||||
attachmentFile.setFileid(fileid);
|
||||
attachementRes.save(attachmentFile);
|
||||
FileUtils.writeByteArrayToFile(new File(path, "upload/" + fileid), file.getBytes());
|
||||
id = attachmentFile.getId();
|
||||
}
|
||||
return id;
|
||||
}
|
||||
|
@ -16,42 +16,53 @@
|
||||
*/
|
||||
package com.chatopera.cc.app.handler.resource;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.net.URL;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.Valid;
|
||||
|
||||
import com.chatopera.cc.app.basic.MainUtils;
|
||||
import com.chatopera.cc.app.handler.Handler;
|
||||
import com.chatopera.cc.app.model.AttachmentFile;
|
||||
import com.chatopera.cc.app.model.StreamingFile;
|
||||
import com.chatopera.cc.app.model.UploadStatus;
|
||||
import com.chatopera.cc.app.persistence.blob.JpaBlobHelper;
|
||||
import com.chatopera.cc.app.persistence.repository.AttachmentRepository;
|
||||
import com.chatopera.cc.app.persistence.repository.StreamingFileRepository;
|
||||
import com.chatopera.cc.util.Menu;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.tomcat.util.http.fileupload.IOUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.ModelMap;
|
||||
import org.springframework.util.FileCopyUtils;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
import com.chatopera.cc.util.Menu;
|
||||
import com.chatopera.cc.app.basic.MainUtils;
|
||||
import com.chatopera.cc.app.persistence.repository.AttachmentRepository;
|
||||
import com.chatopera.cc.app.handler.Handler;
|
||||
import com.chatopera.cc.app.model.AttachmentFile;
|
||||
import com.chatopera.cc.app.model.UploadStatus;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.Valid;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.net.URL;
|
||||
import java.sql.SQLException;
|
||||
|
||||
@Controller
|
||||
@RequestMapping("/res")
|
||||
public class MediaController extends Handler {
|
||||
private final static Logger logger = LoggerFactory.getLogger(MediaController.class);
|
||||
|
||||
@Value("${web.upload-path}")
|
||||
private String path;
|
||||
|
||||
@Autowired
|
||||
private StreamingFileRepository streamingFileRepository;
|
||||
|
||||
@Autowired
|
||||
private JpaBlobHelper jpaBlobHelper;
|
||||
|
||||
private String TEMPLATE_DATA_PATH = "WEB-INF/data/templates/";
|
||||
|
||||
@Autowired
|
||||
@ -59,32 +70,25 @@ public class MediaController extends Handler {
|
||||
|
||||
@RequestMapping("/image")
|
||||
@Menu(type = "resouce", subtype = "image", access = true)
|
||||
public void index(HttpServletResponse response, @Valid String id) throws IOException {
|
||||
File file = new File(path, id);
|
||||
if (!StringUtils.isBlank(id) && !(id.endsWith(".png") || id.endsWith(".jpg"))) {
|
||||
if (id.endsWith("_original") && !file.exists()) {
|
||||
File orgFile = new File(path, id.substring(0, id.indexOf("_original")));
|
||||
if (orgFile.exists()) {
|
||||
MainUtils.processImage(file = new File(path, id), orgFile);
|
||||
}
|
||||
} else if (!StringUtils.isBlank(id) && file.exists() && !id.endsWith("_original")) {
|
||||
File originalFile = new File(path, id + "_original");
|
||||
if (!originalFile.exists()) {
|
||||
MainUtils.processImage(new File(path, id + "_original"), file);
|
||||
}
|
||||
} else if (!StringUtils.isBlank(id) && !file.exists() && !id.endsWith("_original")) {
|
||||
File destFile = new File(path, id + "_original");
|
||||
if (destFile.exists()) {
|
||||
MainUtils.processImage(new File(path + id), destFile);
|
||||
}
|
||||
file = new File(path, id);
|
||||
public void index(HttpServletResponse response,
|
||||
@Valid String id,
|
||||
@RequestParam(value = "original", required = false) boolean original,
|
||||
@RequestParam(value = "cooperation", required = false) boolean cooperation) throws IOException, SQLException {
|
||||
logger.info("index id {}, original {}, cooperation {}", id, original, cooperation);
|
||||
StreamingFile sf = streamingFileRepository.findOne(id);
|
||||
if (sf != null) {
|
||||
response.setHeader("Content-Type", sf.getMime());
|
||||
response.setContentType(sf.getMime());
|
||||
if (cooperation && (sf.getCooperation() != null)) { // 协作文件
|
||||
IOUtils.copy(sf.getCooperation().getBinaryStream(), response.getOutputStream());
|
||||
} else if (original && sf.getData() != null) { // 源文件
|
||||
IOUtils.copy(sf.getData().getBinaryStream(), response.getOutputStream());
|
||||
} else if (sf.getThumbnail() != null) { // 缩略图
|
||||
IOUtils.copy(sf.getThumbnail().getBinaryStream(), response.getOutputStream());
|
||||
} else {
|
||||
logger.warn("[index] can not get streaming file id {}, original {}, cooperation {}", id, original, cooperation);
|
||||
}
|
||||
}
|
||||
if (file.exists() && file.isFile()) {
|
||||
response.setHeader("Content-Type", "image/png");
|
||||
response.setContentType("image/png");
|
||||
response.getOutputStream().write(FileUtils.readFileToByteArray(new File(path, id)));
|
||||
}
|
||||
}
|
||||
|
||||
@RequestMapping("/voice")
|
||||
@ -102,7 +106,7 @@ public class MediaController extends Handler {
|
||||
byte[] data = new byte[1024];
|
||||
int length = 0;
|
||||
OutputStream out = response.getOutputStream();
|
||||
if (!StringUtils.isBlank(url)) {
|
||||
if (StringUtils.isNotBlank(url)) {
|
||||
InputStream input = new URL(url).openStream();
|
||||
while ((length = input.read(data)) > 0) {
|
||||
out.write(data, 0, length);
|
||||
@ -113,44 +117,43 @@ public class MediaController extends Handler {
|
||||
|
||||
@RequestMapping("/image/upload")
|
||||
@Menu(type = "resouce", subtype = "imageupload", access = false)
|
||||
public ModelAndView upload(ModelMap map, HttpServletRequest request, @RequestParam(value = "imgFile", required = false) MultipartFile imgFile) throws IOException {
|
||||
public ModelAndView upload(ModelMap map,
|
||||
HttpServletRequest request,
|
||||
@RequestParam(value = "imgFile", required = false) MultipartFile multipart) throws IOException {
|
||||
ModelAndView view = request(super.createRequestPageTempletResponse("/public/upload"));
|
||||
UploadStatus upload = null;
|
||||
String fileName = null;
|
||||
if (imgFile != null && imgFile.getOriginalFilename().lastIndexOf(".") > 0) {
|
||||
UploadStatus notify = null;
|
||||
if (multipart != null && multipart.getOriginalFilename().lastIndexOf(".") > 0) {
|
||||
File uploadDir = new File(path, "upload");
|
||||
if (!uploadDir.exists()) {
|
||||
uploadDir.mkdirs();
|
||||
}
|
||||
fileName = "upload/" + MainUtils.md5(imgFile.getBytes()) + imgFile.getOriginalFilename().substring(imgFile.getOriginalFilename().lastIndexOf(".")).toLowerCase();
|
||||
FileCopyUtils.copy(imgFile.getBytes(), new File(path, fileName));
|
||||
|
||||
String fileURL = request.getScheme() + "://" + request.getServerName() + "/res/image.html?id=" + fileName;
|
||||
if (request.getServerPort() == 80) {
|
||||
fileURL = request.getScheme() + "://" + request.getServerName() + "/res/image.html?id=" + fileName;
|
||||
} else {
|
||||
fileURL = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + "/res/image.html?id=" + fileName;
|
||||
}
|
||||
upload = new UploadStatus("0", fileURL); //图片直接发送给 客户,不用返回
|
||||
String fileid = MainUtils.getUUID();
|
||||
StreamingFile sf = new StreamingFile();
|
||||
sf.setId(fileid);
|
||||
sf.setName(multipart.getOriginalFilename());
|
||||
sf.setMime(multipart.getContentType());
|
||||
sf.setData(jpaBlobHelper.createBlob(multipart.getInputStream(), multipart.getSize()));
|
||||
streamingFileRepository.save(sf);
|
||||
String fileURL = "/res/image.html?id=" + fileid;
|
||||
notify = new UploadStatus("0", fileURL); //图片直接发送给 客户,不用返回
|
||||
} else {
|
||||
upload = new UploadStatus("请选择图片文件");
|
||||
notify = new UploadStatus("请选择图片文件");
|
||||
}
|
||||
map.addAttribute("upload", upload);
|
||||
map.addAttribute("upload", notify);
|
||||
return view;
|
||||
}
|
||||
|
||||
@RequestMapping("/file")
|
||||
@Menu(type = "resouce", subtype = "file", access = false)
|
||||
public void file(HttpServletResponse response, HttpServletRequest request, @Valid String id) throws IOException {
|
||||
if (!StringUtils.isBlank(id)) {
|
||||
public void file(HttpServletResponse response, HttpServletRequest request, @Valid String id) throws IOException, SQLException {
|
||||
if (StringUtils.isNotBlank(id)) {
|
||||
AttachmentFile attachmentFile = attachementRes.findByIdAndOrgi(id, super.getOrgi(request));
|
||||
if (attachmentFile != null) {
|
||||
response.setContentType(attachmentFile.getFiletype());
|
||||
response.setHeader("Content-Disposition", "attachment;filename=" + java.net.URLEncoder.encode(attachmentFile.getTitle(), "UTF-8"));
|
||||
if (StringUtils.isNotBlank(attachmentFile.getModel()) && attachmentFile.getModel().equals("app")) {
|
||||
response.getOutputStream().write(FileUtils.readFileToByteArray(new File(path, "app/" + attachmentFile.getFileid())));
|
||||
} else {
|
||||
response.getOutputStream().write(FileUtils.readFileToByteArray(new File(path, "upload/" + attachmentFile.getFileid())));
|
||||
if (attachmentFile != null && attachmentFile.getFileid() != null) {
|
||||
StreamingFile sf = streamingFileRepository.findOne(attachmentFile.getFileid());
|
||||
if (sf != null) {
|
||||
response.setContentType(attachmentFile.getFiletype());
|
||||
response.setHeader("Content-Disposition", "attachment;filename=" + java.net.URLEncoder.encode(attachmentFile.getTitle(), "UTF-8"));
|
||||
IOUtils.copy(sf.getData().getBinaryStream(), response.getOutputStream());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -159,7 +162,7 @@ public class MediaController extends Handler {
|
||||
@RequestMapping("/template")
|
||||
@Menu(type = "resouce", subtype = "template", access = false)
|
||||
public void template(HttpServletResponse response, HttpServletRequest request, @Valid String filename) throws IOException {
|
||||
if (!StringUtils.isBlank(filename)) {
|
||||
if (StringUtils.isNotBlank(filename)) {
|
||||
InputStream is = MediaController.class.getClassLoader().getResourceAsStream(TEMPLATE_DATA_PATH + filename);
|
||||
if (is != null) {
|
||||
response.setContentType("text/plain");
|
||||
|
@ -0,0 +1,98 @@
|
||||
/*
|
||||
* Copyright (C) 2018 Chatopera Inc, <https://www.chatopera.com>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.chatopera.cc.app.model;
|
||||
|
||||
import org.hibernate.annotations.GenericGenerator;
|
||||
import org.hibernate.annotations.Proxy;
|
||||
|
||||
import java.sql.Blob;
|
||||
import javax.persistence.*;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
@Entity
|
||||
@Table(name = "cs_stream_file")
|
||||
@Proxy(lazy = false)
|
||||
public class StreamingFile implements java.io.Serializable {
|
||||
|
||||
private String id;
|
||||
|
||||
@NotNull
|
||||
private String name;
|
||||
|
||||
private String mime; // Media Type over HTTP
|
||||
|
||||
@NotNull
|
||||
private Blob data;
|
||||
|
||||
private Blob thumbnail; // 图片缩略图
|
||||
|
||||
private Blob cooperation; // 图片协作图
|
||||
|
||||
@Id
|
||||
@Column(length = 32)
|
||||
@GeneratedValue(generator = "system-uuid")
|
||||
@GenericGenerator(name = "system-uuid", strategy = "assigned")
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(@NotNull String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Blob getData() {
|
||||
return data;
|
||||
}
|
||||
|
||||
public void setData(@NotNull Blob data) {
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
public Blob getThumbnail() {
|
||||
return thumbnail;
|
||||
}
|
||||
|
||||
public void setThumbnail(Blob thumbnail) {
|
||||
this.thumbnail = thumbnail;
|
||||
}
|
||||
|
||||
public String getMime() {
|
||||
return mime;
|
||||
}
|
||||
|
||||
public void setMime(String mime) {
|
||||
this.mime = mime;
|
||||
}
|
||||
|
||||
public Blob getCooperation() {
|
||||
return cooperation;
|
||||
}
|
||||
|
||||
public void setCooperation(Blob cooperation) {
|
||||
this.cooperation = cooperation;
|
||||
}
|
||||
}
|
@ -0,0 +1,55 @@
|
||||
/*
|
||||
* Copyright (C) 2018 Chatopera Inc, <https://www.chatopera.com>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.chatopera.cc.app.persistence.blob;
|
||||
|
||||
import org.hibernate.SessionFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.persistence.EntityManagerFactory;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.InputStream;
|
||||
import java.sql.Blob;
|
||||
|
||||
@Component
|
||||
@Transactional
|
||||
public class JpaBlobHelper {
|
||||
|
||||
private final SessionFactory sessionFactory;
|
||||
|
||||
@Autowired
|
||||
public JpaBlobHelper(EntityManagerFactory factory) {
|
||||
if (factory.unwrap(SessionFactory.class) == null) {
|
||||
throw new NullPointerException("factory is not a hibernate factory");
|
||||
}
|
||||
this.sessionFactory = factory.unwrap(SessionFactory.class);
|
||||
}
|
||||
|
||||
|
||||
public Blob createBlob(InputStream content, long size) {
|
||||
return sessionFactory.getCurrentSession().getLobHelper().createBlob(content, size);
|
||||
}
|
||||
|
||||
public Blob createBlobWithFile(final File file) throws FileNotFoundException {
|
||||
return createBlob(new FileInputStream(file), file.length());
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
/*
|
||||
* Copyright (C) 2018 Chatopera Inc, <https://www.chatopera.com>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.chatopera.cc.app.persistence.repository;
|
||||
|
||||
import com.chatopera.cc.app.model.StreamingFile;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
|
||||
public interface StreamingFileRepository extends JpaRepository<StreamingFile, String> {
|
||||
}
|
@ -19,20 +19,20 @@ package com.chatopera.cc.util;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
|
||||
public class AttachementFormatValidator {
|
||||
public class StreamingFileUtils {
|
||||
|
||||
private static AttachementFormatValidator singleton = new AttachementFormatValidator();
|
||||
private static StreamingFileUtils singleton = new StreamingFileUtils();
|
||||
|
||||
private final HashMap<String, String> extMap = new HashMap<String, String>();
|
||||
|
||||
private AttachementFormatValidator() {
|
||||
private StreamingFileUtils() {
|
||||
extMap.put(Constants.ATTACHMENT_TYPE_IMAGE, "gif,jpg,jpeg,png,bmp");
|
||||
extMap.put(Constants.ATTACHMENT_TYPE_FILE, "doc,docx,xls,xlsx,ppt,htm,html,txt,zip,rar,gz,bz2,c66");
|
||||
extMap.put("flash", "swf,flv");
|
||||
extMap.put("media", "swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb");
|
||||
}
|
||||
|
||||
public static AttachementFormatValidator getInstance() {
|
||||
public static StreamingFileUtils getInstance() {
|
||||
return singleton;
|
||||
}
|
||||
|
||||
@ -49,4 +49,5 @@ public class AttachementFormatValidator {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
@ -31,11 +31,6 @@ server.log.path=../logs
|
||||
server.log.level=INFO
|
||||
web.upload-path=../data
|
||||
|
||||
# multi part
|
||||
spring.servlet.multipart.enabled=true
|
||||
spring.servlet.multipart.max-file-size=20MB
|
||||
spring.servlet.multipart.max-request-size=50MB
|
||||
|
||||
# IM Server
|
||||
uk.im.server.port=8036
|
||||
uk.im.server.host=localhost
|
||||
@ -153,4 +148,12 @@ cskefu.callout.watch.interval=60000
|
||||
##############################################
|
||||
storage.minio.url=http://192.168.2.217:9000
|
||||
storage.minio.access_key=M19Q8YJ8FzLyQtST7r0
|
||||
storage.minio.secret_key=KHv6qjddHD4HfR1m7fjY7HglSO1WOSzIeTERRUUc
|
||||
storage.minio.secret_key=KHv6qjddHD4HfR1m7fjY7HglSO1WOSzIeTERRUUc
|
||||
|
||||
# multi part
|
||||
spring.servlet.multipart.enabled=true
|
||||
spring.servlet.multipart.max-file-size=15MB
|
||||
spring.servlet.multipart.max-request-size=15MB
|
||||
|
||||
# MySQL Blob
|
||||
spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate5.SpringSessionContext
|
||||
|
@ -35,7 +35,7 @@
|
||||
//创建新的图片对象
|
||||
var img = new Image();
|
||||
//指定图片的URL
|
||||
img.src = "/res/image.html?id=upload/${chatMessage.attachmentid!''}_cooperation";
|
||||
img.src = "/res/image.html?id=${chatMessage.attachmentid!''}&cooperation=true&original=true";
|
||||
//浏览器加载图片完毕后再绘制图片
|
||||
img.onload = function(){
|
||||
//以Canvas画布上的坐标(10,10)为起始点,绘制图像
|
||||
@ -49,7 +49,7 @@
|
||||
<div class='ukefu-preview-image scrawl-main' id="scrawl-main">
|
||||
<div class='ukefu-image-content hot'>
|
||||
<div class='ukefu-image-canvas' id='ukefu-image-content'>
|
||||
<img id="ukefu_img_ctx" src='${chatMessage.message!''}_original'>
|
||||
<img id="ukefu_img_ctx" src='${chatMessage.message!''}&original=true'>
|
||||
</div>
|
||||
<div class='drawBoard'>
|
||||
<canvas id="canvas-borad" class="brushBorad">你的浏览器不支持 canvas 绘图</canvas>
|
||||
|
@ -493,7 +493,7 @@
|
||||
var chat=document.getElementsByClassName('chatting-left').innerText;
|
||||
chat = data.message;
|
||||
if(data.messageType == "image"){
|
||||
chat = "<a href='"+data.message+"_original' target='_blank'><img src='"+data.message+"' class='ukefu-media-image'/></a>" ;
|
||||
chat = "<a href='"+data.message+"&original=true' target='_blank'><img src='"+data.message+"' class='ukefu-media-image'/></a>" ;
|
||||
}else if(data.messageType == "file"){
|
||||
chat = "<div class='ukefu-message-file'><div class='ukefu-file-icon'><img src='/im/img/file.png'></div><div class='ukefu-file-desc'><a href='"+data.message+"' target='_blank'><div>"+data.filename+"</div><div>"+(data.filesize/1024).toFixed(3)+"Kb</div></a></div></div>" ;
|
||||
}
|
||||
|
@ -302,7 +302,7 @@
|
||||
var chat=document.getElementsByClassName('chatting-left').innerText;
|
||||
chat = data.message;
|
||||
if(data.messageType == "image"){
|
||||
chat = "<a href='"+data.message+"_original' target='_blank'><img src='"+data.message+"' class='ukefu-media-image'/></a>" ;
|
||||
chat = "<a href='"+data.message+"&original=true' target='_blank'><img src='"+data.message+"' class='ukefu-media-image'/></a>" ;
|
||||
}else if(data.messageType == "cooperation"){
|
||||
chat = "<a href='javascript:void(0)' onclick='acceptInvite(\""+data.message+"\", \""+data.attachmentid+"\")'>您收到一个协作邀请,点击进入协作</a>" ;
|
||||
}else if(data.messageType == "action"){
|
||||
@ -324,7 +324,7 @@
|
||||
}
|
||||
function acceptInvite(msgid,fileid){
|
||||
document.getElementById("cooperation").style.display = "block" ;
|
||||
document.getElementById("ukefu_img_ctx").src = "/res/image.html?id=upload/"+fileid ;
|
||||
document.getElementById("ukefu_img_ctx").src = "/res/image.html?id="+fileid + "&cooperation=true&original=true";
|
||||
|
||||
$("#ukefu_img_ctx").load(function() {
|
||||
var height = document.getElementById("ukefu-image-content").offsetHeight;
|
||||
@ -348,7 +348,7 @@
|
||||
//创建新的图片对象
|
||||
var img = new Image();
|
||||
//指定图片的URL
|
||||
img.src = "/res/image.html?id=upload/" + fileid + "_cooperation";
|
||||
img.src = "/res/image.html?id=" + fileid + "&cooperation=true&original=true";
|
||||
//浏览器加载图片完毕后再绘制图片
|
||||
img.onload = function() {
|
||||
ctx.clearRect(0,0,canvas.width,canvas.height);
|
||||
|
@ -491,7 +491,7 @@
|
||||
var chat=document.getElementsByClassName('chatting-left').innerText;
|
||||
chat = data.message;
|
||||
if(data.messageType == "image"){
|
||||
chat = "<a href='"+data.message+"_original' target='_blank'><img src='"+data.message+"' class='ukefu-media-image'/></a>" ;
|
||||
chat = "<a href='"+data.message+"&original=true' target='_blank'><img src='"+data.message+"' class='ukefu-media-image'/></a>" ;
|
||||
}else if(data.messageType == "file"){
|
||||
chat = "<div class='ukefu-message-file'><div class='ukefu-file-icon'><img src='/im/img/file.png'></div><div class='ukefu-file-desc'><a href='"+data.message+"' target='_blank'><div>"+data.filename+"</div><div>"+(data.filesize/1024).toFixed(3)+"Kb</div></a></div></div>" ;
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
<#if chatMessage.msgtype?? && chatMessage.msgtype == "image">
|
||||
<a href="${(chatMessage.message!'')?no_esc}_original" target="_blank"><img src="${(chatMessage.message!'')?no_esc}" class="ukefu-media-image"></a>
|
||||
<a href="${(chatMessage.message!'')?no_esc}&original=true" target="_blank"><img src="${(chatMessage.message!'')?no_esc}" class="ukefu-media-image"></a>
|
||||
<#elseif chatMessage.msgtype?? && chatMessage.msgtype == "cooperation">
|
||||
<a href='javascript:void(0)' onclick='acceptInvite("${chatMessage.message!''}" , "${chatMessage.attachmentid!''}")'>您收到一个协作邀请,点击进入协作</a>
|
||||
<#elseif chatMessage.msgtype?? && chatMessage.msgtype == "file">
|
||||
|
@ -300,7 +300,7 @@
|
||||
var chat=document.getElementsByClassName('chatting-left').innerText;
|
||||
chat = data.message;
|
||||
if(data.messageType == "image"){
|
||||
chat = "<a href='"+data.message+"_original' target='_blank'><img src='"+data.message+"' class='ukefu-media-image'/></a>" ;
|
||||
chat = "<a href='"+data.message+"&original=true' target='_blank'><img src='"+data.message+"' class='ukefu-media-image'/></a>" ;
|
||||
}else if(data.messageType == "cooperation"){
|
||||
chat = "<a href='javascript:void(0)' onclick='acceptInvite(\""+data.message+"\", \""+data.attachmentid+"\")'>您收到一个协作邀请,点击进入协作</a>" ;
|
||||
}else if(data.messageType == "action"){
|
||||
@ -322,7 +322,7 @@
|
||||
}
|
||||
function acceptInvite(msgid,fileid){
|
||||
document.getElementById("cooperation").style.display = "block" ;
|
||||
document.getElementById("ukefu_img_ctx").src = "/res/image.html?id=upload/"+fileid ;
|
||||
document.getElementById("ukefu_img_ctx").src = "/res/image.html?id="+fileid + "&cooperation=true&original=true";
|
||||
|
||||
$("#ukefu_img_ctx").load(function() {
|
||||
var height = document.getElementById("ukefu-image-content").offsetHeight;
|
||||
@ -346,7 +346,7 @@
|
||||
//创建新的图片对象
|
||||
var img = new Image();
|
||||
//指定图片的URL
|
||||
img.src = "/res/image.html?id=upload/" + fileid + "_cooperation";
|
||||
img.src = "/res/image.html?id=" + fileid + "&cooperation=true&original=true";
|
||||
//浏览器加载图片完毕后再绘制图片
|
||||
img.onload = function() {
|
||||
ctx.clearRect(0,0,canvas.width,canvas.height);
|
||||
|
Loading…
x
Reference in New Issue
Block a user