Selaa lähdekoodia

replace file separator with Paths

yyy2015 7 vuotta sitten
vanhempi
commit
566af9996c

+ 8 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/Constants.java

@@ -30,8 +30,16 @@ public class Constants {
 
     public static final String TARGET_PATH = "target";
 
+    public static final String MAIN_NAME = "main.py";
+
+    public static final String CONTENT_PATH = "content";
+
     public static final String MOOCTEST_PATH = ".mooctest";
 
+    public static final String ANSWER_NAME = "answer.py";
+
+    public static final String TEST_CASE_NAME = "testCases.json";
+
     public static final String SAVE_PATH = "/var/www/download/";
 
 }

+ 9 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/TargetController.java

@@ -13,6 +13,7 @@ import cn.iselab.mooctest.site.web.logic.TargetLogic;
 import cn.iselab.mooctest.site.web.response.ResponseMessage;
 import cn.iselab.mooctest.site.web.response.SuccessResult;
 import com.google.gson.Gson;
+import java.io.IOException;
 import org.apache.shiro.SecurityUtils;
 import org.apache.shiro.authz.UnauthenticatedException;
 import org.apache.shiro.authz.annotation.RequiresRoles;
@@ -25,6 +26,7 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.Map;
+import org.springframework.web.multipart.MultipartFile;
 
 /**
  * Created by ROGK on 2017/6/18.
@@ -89,6 +91,13 @@ public class TargetController extends BaseSearchController {
     }
 
     @RequiresRoles("manager")
+    @RequestMapping(value = UrlConstants.API + "target/uploadZip", method = RequestMethod.POST)
+    public String uploadTargetZip(@RequestParam("zipFile")MultipartFile zipFile)
+            throws IOException {
+        return targetLogic.saveTargetZip(zipFile);
+    }
+
+    @RequiresRoles("manager")
     @RequestMapping(value = UrlConstants.API + "target/upload", method = RequestMethod.POST)
     public boolean uploadCommunityTarget(@RequestBody TargetUpload targetUpload,
             HttpServletRequest request) {

+ 4 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/TargetLogic.java

@@ -4,11 +4,13 @@ import cn.iselab.mooctest.site.web.data.*;
 import cn.iselab.mooctest.site.web.data.targetVO.TargetCreateVO;
 import cn.iselab.mooctest.site.web.data.targetVO.TargetListVO;
 import cn.iselab.mooctest.site.web.data.targetVO.TargetViewVO;
+import java.io.IOException;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 
 import java.util.List;
 import java.util.Map;
+import org.springframework.web.multipart.MultipartFile;
 
 /**
  * Created by ROGK on 2017/6/18.
@@ -35,4 +37,6 @@ public interface TargetLogic {
 
     boolean uploadTarget(long targetId,String frameCode, String code, List<TestCase> testCases,
             String host);
+
+    String saveTargetZip(MultipartFile zipFile) throws IOException;
 }

+ 22 - 9
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/TargetLogicImpl.java

@@ -42,6 +42,8 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.lang.reflect.Type;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -52,6 +54,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
 
 /**
  * Created by ROGK on 2017/6/18.
@@ -275,10 +278,10 @@ public class TargetLogicImpl extends BaseLogic implements TargetLogic {
         List<TestCase> validCases = new ArrayList<>();
         caseMap.forEach((key, value) -> validCases.add(new TestCase(key, value)));
 
-        String targetPath = System.getProperty("java.io.tmpdir")+File.separator+
-                Constants.TARGET_PATH+File.separator+targetId+File.separator;
-        String targetContentPath = targetPath+"content"+File.separator;
-        String mooctestPath = targetContentPath+File.separator+Constants.MOOCTEST_PATH+File.separator;
+        String targetPath = Paths.get(System.getProperty("java.io.tmpdir"),Constants.TARGET_PATH,
+                targetId+"").toString();
+        String targetContentPath = Paths.get(targetPath,Constants.CONTENT_PATH).toString();
+        String mooctestPath = Paths.get(targetContentPath,Constants.MOOCTEST_PATH).toString();
 
         //删除已有文件
         File targetPathFile = new File(targetPath);
@@ -287,10 +290,12 @@ public class TargetLogicImpl extends BaseLogic implements TargetLogic {
         }
 
         //写入文件
-        boolean writeSuccess = FileUtils.writingStringToFile(frameCode,targetContentPath+"problem.py") &&
-                FileUtils.writingStringToFile(code,mooctestPath+"answer.py") &&
+        boolean writeSuccess = FileUtils.writingStringToFile(frameCode,
+                Paths.get(targetContentPath,Constants.MAIN_NAME).toString()) &&
+                FileUtils.writingStringToFile(code,Paths.get(mooctestPath,
+                        Constants.ANSWER_NAME).toString())&&
                 FileUtils.writingStringToFile(new Gson().toJson(validCases),
-                        mooctestPath+"testCases.json");
+                        Paths.get(mooctestPath,Constants.TEST_CASE_NAME).toString());
 
         //打包上传
         if(writeSuccess){
@@ -298,7 +303,7 @@ public class TargetLogicImpl extends BaseLogic implements TargetLogic {
             String url = "";
             if(!OSSOn){
                 //存储target文件到本地服务器
-                String zipFilePath = Constants.SAVE_PATH+File.separator+zipFileName;
+                String zipFilePath = Paths.get(Constants.SAVE_PATH,zipFileName).toString();
                 if(FileUtils.zipMultiFile(targetContentPath,zipFilePath,false)){
                     url = host+zipFileName;
                 }else{
@@ -306,7 +311,7 @@ public class TargetLogicImpl extends BaseLogic implements TargetLogic {
                 }
             }else{
                 //存储文件到oss
-                String zipFilePath = targetPath+zipFileName;
+                String zipFilePath = Paths.get(targetPath,zipFileName).toString();
                 if(FileUtils.zipMultiFile(targetContentPath,zipFilePath,false)){
                     InputStream zipStream = null;
                     try {
@@ -331,6 +336,14 @@ public class TargetLogicImpl extends BaseLogic implements TargetLogic {
 
     }
 
+    @Override
+    public String saveTargetZip(MultipartFile zipFile) throws IOException {
+        Path tmpZipPath = Paths.get(System.getProperty("java.io.tmpdir"),Constants.TARGET_PATH,
+                +System.currentTimeMillis()+"_"+zipFile.getOriginalFilename());
+
+        return ossLogic.saveFileTemp(zipFile,tmpZipPath.toString());
+    }
+
 
     private void setListener(long targetId, long targetType, String url) {
         GetTargetGraphEvent event = new GetTargetGraphEvent(targetId, url, targetType);