diff --git a/src/main/java/org/ntlab/nemophila/resources/accounts/AccountPostRest.java b/src/main/java/org/ntlab/nemophila/resources/accounts/AccountPostRest.java index 1d03b33..333391d 100644 --- a/src/main/java/org/ntlab/nemophila/resources/accounts/AccountPostRest.java +++ b/src/main/java/org/ntlab/nemophila/resources/accounts/AccountPostRest.java @@ -4,15 +4,24 @@ import org.ntlab.nemophila.models.accounts.AccountManager; import org.ntlab.nemophila.models.accounts.Post; import org.ntlab.nemophila.models.shops.Shop; +import org.ntlab.nemophila.utils.Base64Decode; +import org.springframework.beans.BeansException; import org.springframework.stereotype.Component; import javax.ws.rs.*; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; +import java.io.IOException; @Component @Path("/accounts") public class AccountPostRest { + private org.springframework.context.ApplicationContext applicationContext; + + public void setApplicationContext(org.springframework.context.ApplicationContext applicationContext) throws BeansException { + this.applicationContext = applicationContext; + } + @PUT @Path("/{uid}/posts/{pid}") public void putAccountPost(@PathParam("uid") String uid, @PathParam("pid") String pid, @FormParam("token") String token, @@ -21,14 +30,27 @@ AccountManager am = AccountManager.getInstance(); Account account = am.getAccount(uid); + String pathDirectory = ""; + if(account != null && account.getToken().equals(token)) { Post post = account.getPost(pid); + String[] images = {image1, image2, image3}; + if (genre != null) post.setGenre(genre); if (image1 != null) post.setImage1(image1); if (image2 != null) post.setImage2(image2); if (image3 != null) post.setImage3(image3); if (rate != null) post.setRate(rate); if (comment != null) post.setComment(comment); + + try { + pathDirectory = applicationContext.getResource("file:").getFile().getAbsolutePath() + "/apache-tomcat-9.0.10/webapps/nemophila-data"; + Base64Decode.savePostImage(uid, post.getId(), pathDirectory, images); + } catch (IOException e){ + e.printStackTrace(); + throw new WebApplicationException(500); + } + } else { var response = Response.status(Response.Status.NO_CONTENT); response.status(401).entity("tokenの認証に失敗"); diff --git a/src/main/java/org/ntlab/nemophila/resources/accounts/AccountPostsRest.java b/src/main/java/org/ntlab/nemophila/resources/accounts/AccountPostsRest.java index fa51c5a..9be769e 100644 --- a/src/main/java/org/ntlab/nemophila/resources/accounts/AccountPostsRest.java +++ b/src/main/java/org/ntlab/nemophila/resources/accounts/AccountPostsRest.java @@ -1,21 +1,31 @@ package org.ntlab.nemophila.resources.accounts; +import com.fasterxml.jackson.databind.ser.Serializers; import org.ntlab.nemophila.models.accounts.Account; import org.ntlab.nemophila.models.accounts.AccountManager; import org.ntlab.nemophila.models.accounts.Post; import org.ntlab.nemophila.models.shops.Shop; import org.ntlab.nemophila.models.shops.ShopManager; +import org.ntlab.nemophila.utils.Base64Decode; +import org.springframework.beans.BeansException; import org.springframework.stereotype.Component; import javax.ws.rs.*; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; +import java.io.IOException; import java.util.Collection; @Component @Path("/accounts") public class AccountPostsRest { + private org.springframework.context.ApplicationContext applicationContext; + + public void setApplicationContext(org.springframework.context.ApplicationContext applicationContext) throws BeansException{ + this.applicationContext = applicationContext; + } + // 「/{uid}/posts」のPOSTメソッド @POST @Path("/{uid}/posts") @@ -32,6 +42,8 @@ ShopManager sm = ShopManager.getInstance(); Shop shop = sm.getShop(sid); + String pathDirectory = ""; + /* (対象のアカウントインスタンスが) 存在する場合:投稿を新規作成し、その投稿IDを返す @@ -39,6 +51,16 @@ */ if (account != null && account.getToken().equals(token)) { Post post = account.createPost(shop, rate, genre, comme, img1, img2, img3); + String[] images = {img1, img2, img3}; + + try { + pathDirectory = applicationContext.getResource("file:").getFile().getAbsolutePath() + "/apache-tomcat-9.0.10/webapps/nemophila-data"; + Base64Decode.savePostImage(uid, post.getId(), pathDirectory, images); + } catch (IOException e){ + e.printStackTrace(); + throw new WebApplicationException(500); + } + return post.getId(); } else if (!account.getToken().equals(token)){ var response = Response.status(Response.Status.NO_CONTENT); diff --git a/src/main/java/org/ntlab/nemophila/utils/Base64Decode.java b/src/main/java/org/ntlab/nemophila/utils/Base64Decode.java new file mode 100644 index 0000000..a2b124f --- /dev/null +++ b/src/main/java/org/ntlab/nemophila/utils/Base64Decode.java @@ -0,0 +1,47 @@ +package org.ntlab.nemophila.utils; + +import java.io.*; +import java.util.Base64; + +public class Base64Decode { + private static void saveAsFile(String path, String enImage) throws IOException{ + byte[] deData = Base64.getDecoder().decode(enImage); + + File file = new File(path); + + if(enImage == null) { + file.delete(); + return; + } + + file.getParentFile().mkdir(); + file.createNewFile(); + + FileOutputStream fileOS = new FileOutputStream(file, false); + BufferedOutputStream bf = new BufferedOutputStream(fileOS); + bf.write(deData, 0, deData.length); + + bf.close(); + } + + public static void saveIcon(String id, String path1, String enImage) throws IOException { + String fileName = "icon" + id + ".jpg"; + String path = path1 + "/" + fileName; + saveAsFile(path, enImage); + + System.out.println(path); + } + + public static void savePostImage(String id, String pid, String path1, String[] enImage) throws IOException { + for(int i = 0; i < enImage.length; i++) { + String fileName = "post_image" + id + "-" + pid + "-" + (i+1) + ".jpg"; + String path = path1 + "/" + fileName; + + if(enImage[i] != null) { + saveAsFile(path, enImage[i]); + } + + System.out.println(path); + } + } +}