diff --git a/src/main/java/org/codelibs/fess/app/web/api/admin/storage/ApiAdminStorageAction.java b/src/main/java/org/codelibs/fess/app/web/api/admin/storage/ApiAdminStorageAction.java
index ffdff990b58f589093a1c0fbed05adeea0de958f..28b08439689ecbb9fec73196585f2ef702040ef9 100644
--- a/src/main/java/org/codelibs/fess/app/web/api/admin/storage/ApiAdminStorageAction.java
+++ b/src/main/java/org/codelibs/fess/app/web/api/admin/storage/ApiAdminStorageAction.java
@@ -70,6 +70,9 @@ public class ApiAdminStorageAction extends FessApiAdminAction {
             try {
                 downloadObject(getObjectName(values[0], values[1]), out);
             } catch (final StorageException e) {
+                if (logger.isDebugEnabled()) {
+                    logger.debug("Failed to download " + id, e);
+                }
                 throwValidationErrorApi(messages -> messages.addErrorsStorageFileDownloadFailure(GLOBAL, values[1]));
             }
         });
@@ -88,24 +91,32 @@ public class ApiAdminStorageAction extends FessApiAdminAction {
             saveInfo(messages -> messages.addSuccessDeleteFile(GLOBAL, values[1]));
             return asJson(new ApiResult.ApiResponse().status(ApiResult.Status.OK).result());
         } catch (final StorageException e) {
+            if (logger.isDebugEnabled()) {
+                logger.debug("Failed to delete " + id, e);
+            }
             throwValidationErrorApi(messages -> messages.addErrorsFailedToDeleteFile(GLOBAL, values[1]));
         }
         return null;
     }
 
+    // curl -XPOST -H "Authorization: CHANGEME" localhost:8080/api/admin/storage/upload/ -F path=/ -F file=@...
     // POST /api/admin/storage/upload/{pathId}/
     @Execute
-    public JsonResponse<ApiResult> post$upload(final String pathId, final UploadForm form) {
+    public JsonResponse<ApiResult> post$upload(final UploadForm form) {
         validateApi(form, messages -> {});
-        if (form.uploadFile == null) {
+        if (form.file == null) {
             throwValidationErrorApi(messages -> messages.addErrorsStorageNoUploadFile(GLOBAL));
         }
+        final String fileName = form.file.getFileName();
         try {
-            uploadObject(getObjectName(decodeId(pathId)[0], form.uploadFile.getFileName()), form.uploadFile);
-            saveInfo(messages -> messages.addSuccessUploadFileToStorage(GLOBAL, form.uploadFile.getFileName()));
+            uploadObject(getObjectName(form.path, fileName), form.file);
+            saveInfo(messages -> messages.addSuccessUploadFileToStorage(GLOBAL, fileName));
             return asJson(new ApiResult.ApiResponse().status(ApiResult.Status.OK).result());
         } catch (final StorageException e) {
-            throwValidationErrorApi(messages -> messages.addErrorsStorageFileUploadFailure(GLOBAL, form.uploadFile.getFileName()));
+            if (logger.isDebugEnabled()) {
+                logger.debug("Failed to upload " + fileName, e);
+            }
+            throwValidationErrorApi(messages -> messages.addErrorsStorageFileUploadFailure(GLOBAL, fileName));
         }
         return null;
     }
diff --git a/src/main/java/org/codelibs/fess/app/web/api/admin/storage/UploadForm.java b/src/main/java/org/codelibs/fess/app/web/api/admin/storage/UploadForm.java
index 3c12ec5bf84bb7f9d1b7e28fbf53ed3eace02e60..00aa6553d7121bfdeaa16c65f450ea7976f4803c 100644
--- a/src/main/java/org/codelibs/fess/app/web/api/admin/storage/UploadForm.java
+++ b/src/main/java/org/codelibs/fess/app/web/api/admin/storage/UploadForm.java
@@ -15,13 +15,14 @@
  */
 package org.codelibs.fess.app.web.api.admin.storage;
 
-import org.codelibs.fess.app.web.admin.storage.ItemForm;
 import org.lastaflute.web.ruts.multipart.MultipartFormFile;
 import org.lastaflute.web.validation.Required;
 
-public class UploadForm extends ItemForm {
+public class UploadForm {
+
+    public String path;
 
     @Required
-    public MultipartFormFile uploadFile;
+    public MultipartFormFile file;
 
 }