package cn.cloudowr.attach; import com.aliyun.oss.model.UploadFileRequest; import com.aliyun.oss.model.UploadFileResult; import com.jfinal.aop.Before; import com.jfinal.render.ContentType; import com.jfinal.upload.UploadFile; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import com.mongodb.client.model.Filters; import com.mongodb.client.model.UpdateOptions; import com.mongodb.client.model.Updates; import com.mongodb.client.result.DeleteResult; import com.mongodb.client.result.UpdateResult; import org.bson.Document; import org.bson.conversions.Bson; import org.bson.types.ObjectId; import java.io.File; import java.util.*; /** * Created by lyf66 on 2017/2/17. */ public class Controller extends com.jfinal.core.Controller { public void ping() { renderText("pong"); } public void upload() throws Throwable { UploadFile file = getFile(); String json = getPara("json", null); Document doc = null; if (json != null) { try { doc = Document.parse(json); } catch (Exception e) { renderError(400); return; } } if (doc == null) { doc = new Document(); } String key = UUID.randomUUID().toString().replace("-", ""); UploadFileRequest uploadFileRequest = new UploadFileRequest(Config.BukketName, key); uploadFileRequest.setUploadFile(file.getUploadPath() + File.separator + file.getFileName()); uploadFileRequest.setTaskNum(5); uploadFileRequest.setPartSize(1 * 1024 * 1024); uploadFileRequest.setEnableCheckpoint(true); UploadFileResult uploadFileResult = Config.getOssClient().uploadFile(uploadFileRequest); uploadFileResult.getMultipartUploadResult(); MongoCollection collection = Config.getMongoDatabase().getCollection("attach"); doc.put("ossurl", Config.OssUrl + key); doc.put("filename", file.getFileName()); collection.insertOne(doc); file.getFile().delete(); renderJson(doc.toJson()); } public void download() throws Throwable { String id = getPara("id"); if (id == null || id.isEmpty()) { renderError(404); return; } MongoCollection collection = Config.getMongoDatabase().getCollection("attach"); Document doc = collection.find(Filters.eq("_id", new ObjectId(id))).first(); renderJson("url", doc.getString("ossurl")); } public void attach() { Map paraMap = getParaMap(); List ops = new ArrayList<>(); paraMap.forEach((key, arr) -> { if ("id".equals(key)) { ops.add(Filters.eq("_id", new ObjectId(arr[0]))); } else { ops.add(Filters.eq(key, arr[0])); } }); MongoCollection collection = Config.getMongoDatabase().getCollection("attach"); List documents = new ArrayList<>(); collection.find( Filters.and(ops) ).into(documents); List json = new ArrayList<>(); documents.forEach(doc -> { json.add(doc.toJson()); }); renderText(Arrays.toString(json.toArray()), ContentType.JSON); } public void attachList() { int pageNum = getParaToInt("pageNum", 0); int pageSize = getParaToInt("pageSize", 20); MongoCollection collection = getCollection(); List documents = new ArrayList<>(); collection.find().limit(pageSize).skip(pageNum * pageSize).into(documents); List json = new ArrayList<>(); documents.forEach(doc -> { json.add(doc.toJson()); }); renderText(Arrays.toString(json.toArray()), ContentType.JSON); } public void addAttach() { Map paraMap = getParaMap(); Document attach = new Document(); paraMap.forEach((key, arr) -> { if (arr.length == 1) { attach.put(key, arr[0]); } else if (arr.length > 1) { List s = new ArrayList<>(); for (String s1 : arr) { s.add(s1); } attach.put(key, s); } }); getCollection().insertOne(attach); renderJson(attach.toJson()); } @Before(IdInterceptor.class) public void updateAttach() { String id = getPara("id"); String action = getPara("action"); String[] keysToUnset = getParaValues("keys"); List ops = new ArrayList<>(); if ("unset".equals(action)) { for (String key : keysToUnset) { if (key.equals("id")) continue; ops.add(Updates.unset(key)); } } else { Map paraMap = getParaMap(); paraMap.forEach((key, arr) -> { if (!"id".equals(key) && !"action".equals(key)) { if (arr.length == 1) { ops.add(Updates.set(key, arr[0])); } else if (arr.length > 1) { List s = new ArrayList<>(); for (String s1 : arr) { s.add(s1); } ops.add(Updates.set(key, s)); } } }); } UpdateResult result = getCollection().updateOne( Filters.eq("_id", new ObjectId(id)), Updates.combine( ops ), new UpdateOptions().upsert(true) ); renderJson("result", result.getMatchedCount() >= 1); } @Before(IdInterceptor.class) public void deleteAttach() { String id = getPara("id"); DeleteResult result = getCollection().deleteOne( Filters.eq("_id", new ObjectId(id)) ); renderJson("result", result.getDeletedCount() == 1); } private MongoCollection getCollection() { MongoDatabase mongoDataBase = Config.getMongoDatabase(); MongoCollection collection = mongoDataBase.getCollection("attach"); return collection; } private static String getPrefix(String filename) { int lastIndexOf = filename.lastIndexOf("."); if (lastIndexOf == -1) { return filename; } else { return filename.substring(0, lastIndexOf); } } private static String getSuffix(String filename) { int lastIndexOf = filename.lastIndexOf("."); if (lastIndexOf == -1) { return ""; } else { return filename.substring(lastIndexOf + 1, filename.length()); } } }