Explorar o código

添加 head 请求判断对象是否存在

reghao %!s(int64=2) %!d(string=hai) anos
pai
achega
15899e76d9

+ 7 - 3
oss-store/src/main/java/cn/reghao/oss/store/controller/ObjectGetController.java

@@ -29,9 +29,13 @@ public class ObjectGetController {
     }
 
     @RequestMapping(value = "/**", method = RequestMethod.HEAD)
-    public void headObject() throws IOException {
-        String objectName = ObjectUtil.getObjectName();
-        getObjectService.headObject(objectName);
+    public void headObject(@RequestParam(value = "sha256sum", required = false) String sha256sum) throws IOException {
+        if (sha256sum != null) {
+            getObjectService.headObject1(sha256sum);
+        } else {
+            String objectName = ObjectUtil.getObjectName();
+            getObjectService.headObject(objectName);
+        }
     }
 
     @GetMapping(value = "/**")

+ 20 - 0
oss-store/src/main/java/cn/reghao/oss/store/service/GetObjectService.java

@@ -55,6 +55,26 @@ public class GetObjectService {
         outputStream.close();
     }
 
+    public void headObject1(String sha256sum) throws IOException {
+        HttpServletResponse response = ServletUtil.getResponse();
+        FileMeta fileMeta = fileMetaMapper.findBySha256sum(sha256sum);
+        if (fileMeta == null) {
+            response.setStatus(HttpServletResponse.SC_NOT_FOUND);
+        } else {
+            response.setStatus(HttpServletResponse.SC_OK);
+            String contentType = fileMeta.getContentType();
+            long contentLength = fileMeta.getSize();
+            String eTag = fileMeta.getSha256sum();
+            response.setHeader("content-type", contentType);
+            response.setHeader("content-length", ""+contentLength);
+            response.setHeader("eTag", eTag);
+        }
+
+        OutputStream outputStream = response.getOutputStream();
+        outputStream.flush();
+        outputStream.close();
+    }
+
     public void getObject(String objectName) throws IOException {
         String host = ServletUtil.getRequest().getHeader("host");