|
@@ -3,147 +3,148 @@ package com.baidu.ueditor.upload;
|
|
import com.baidu.ueditor.define.AppInfo;
|
|
import com.baidu.ueditor.define.AppInfo;
|
|
import com.baidu.ueditor.define.BaseState;
|
|
import com.baidu.ueditor.define.BaseState;
|
|
import com.baidu.ueditor.define.State;
|
|
import com.baidu.ueditor.define.State;
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
import org.apache.commons.io.FileUtils;
|
|
import org.apache.commons.io.FileUtils;
|
|
|
|
|
|
import java.io.*;
|
|
import java.io.*;
|
|
|
|
|
|
|
|
+@Slf4j
|
|
public class StorageManager {
|
|
public class StorageManager {
|
|
- public static final int BUFFER_SIZE = 8192;
|
|
|
|
-
|
|
|
|
- public StorageManager() {
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public static State saveBinaryFile(byte[] data, String path) {
|
|
|
|
- File file = new File(path);
|
|
|
|
-
|
|
|
|
- State state = valid(file);
|
|
|
|
-
|
|
|
|
- if (!state.isSuccess()) {
|
|
|
|
- return state;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- try {
|
|
|
|
- BufferedOutputStream bos = new BufferedOutputStream(
|
|
|
|
- new FileOutputStream(file));
|
|
|
|
- bos.write(data);
|
|
|
|
- bos.flush();
|
|
|
|
- bos.close();
|
|
|
|
- } catch (IOException ioe) {
|
|
|
|
- return new BaseState(false, AppInfo.IO_ERROR);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- state = new BaseState(true, file.getAbsolutePath());
|
|
|
|
- state.putInfo( "size", data.length );
|
|
|
|
- state.putInfo( "title", file.getName() );
|
|
|
|
- return state;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public static State saveFileByInputStream(InputStream is, String path,
|
|
|
|
- long maxSize) {
|
|
|
|
- State state = null;
|
|
|
|
-
|
|
|
|
- File tmpFile = getTmpFile();
|
|
|
|
-
|
|
|
|
- byte[] dataBuf = new byte[ 2048 ];
|
|
|
|
- BufferedInputStream bis = new BufferedInputStream(is, StorageManager.BUFFER_SIZE);
|
|
|
|
-
|
|
|
|
- try {
|
|
|
|
- BufferedOutputStream bos = new BufferedOutputStream(
|
|
|
|
- new FileOutputStream(tmpFile), StorageManager.BUFFER_SIZE);
|
|
|
|
-
|
|
|
|
- int count = 0;
|
|
|
|
- while ((count = bis.read(dataBuf)) != -1) {
|
|
|
|
- bos.write(dataBuf, 0, count);
|
|
|
|
- }
|
|
|
|
- bos.flush();
|
|
|
|
- bos.close();
|
|
|
|
-
|
|
|
|
- if (tmpFile.length() > maxSize) {
|
|
|
|
- tmpFile.delete();
|
|
|
|
- return new BaseState(false, AppInfo.MAX_SIZE);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- state = saveTmpFile(tmpFile, path);
|
|
|
|
-
|
|
|
|
- if (!state.isSuccess()) {
|
|
|
|
- tmpFile.delete();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return state;
|
|
|
|
-
|
|
|
|
- } catch (IOException e) {
|
|
|
|
- }
|
|
|
|
- return new BaseState(false, AppInfo.IO_ERROR);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public static State saveFileByInputStream(InputStream is, String path) {
|
|
|
|
- State state = null;
|
|
|
|
-
|
|
|
|
- File tmpFile = getTmpFile();
|
|
|
|
-
|
|
|
|
- byte[] dataBuf = new byte[ 2048 ];
|
|
|
|
- BufferedInputStream bis = new BufferedInputStream(is, StorageManager.BUFFER_SIZE);
|
|
|
|
-
|
|
|
|
- try {
|
|
|
|
- BufferedOutputStream bos = new BufferedOutputStream(
|
|
|
|
- new FileOutputStream(tmpFile), StorageManager.BUFFER_SIZE);
|
|
|
|
-
|
|
|
|
- int count = 0;
|
|
|
|
- while ((count = bis.read(dataBuf)) != -1) {
|
|
|
|
- bos.write(dataBuf, 0, count);
|
|
|
|
- }
|
|
|
|
- bos.flush();
|
|
|
|
- bos.close();
|
|
|
|
-
|
|
|
|
- state = saveTmpFile(tmpFile, path);
|
|
|
|
-
|
|
|
|
- if (!state.isSuccess()) {
|
|
|
|
- tmpFile.delete();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return state;
|
|
|
|
- } catch (IOException e) {
|
|
|
|
- }
|
|
|
|
- return new BaseState(false, AppInfo.IO_ERROR);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- private static File getTmpFile() {
|
|
|
|
- File tmpDir = FileUtils.getTempDirectory();
|
|
|
|
- String tmpFileName = (Math.random() * 10000 + "").replace(".", "");
|
|
|
|
- return new File(tmpDir, tmpFileName);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- private static State saveTmpFile(File tmpFile, String path) {
|
|
|
|
- State state = null;
|
|
|
|
- File targetFile = new File(path);
|
|
|
|
-
|
|
|
|
- if (targetFile.canWrite()) {
|
|
|
|
- return new BaseState(false, AppInfo.PERMISSION_DENIED);
|
|
|
|
- }
|
|
|
|
- try {
|
|
|
|
- FileUtils.moveFile(tmpFile, targetFile);
|
|
|
|
- } catch (IOException e) {
|
|
|
|
- return new BaseState(false, AppInfo.IO_ERROR);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- state = new BaseState(true);
|
|
|
|
- state.putInfo( "size", targetFile.length() );
|
|
|
|
- state.putInfo( "title", targetFile.getName() );
|
|
|
|
-
|
|
|
|
- return state;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- private static State valid(File file) {
|
|
|
|
- File parentPath = file.getParentFile();
|
|
|
|
-
|
|
|
|
- if ((!parentPath.exists()) && (!parentPath.mkdirs())) {
|
|
|
|
- return new BaseState(false, AppInfo.FAILED_CREATE_FILE);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (!parentPath.canWrite()) {
|
|
|
|
- return new BaseState(false, AppInfo.PERMISSION_DENIED);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return new BaseState(true);
|
|
|
|
- }
|
|
|
|
|
|
+ public static final int BUFFER_SIZE = 8192;
|
|
|
|
+
|
|
|
|
+ public StorageManager() {
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public static State saveBinaryFile(byte[] data, String path) {
|
|
|
|
+ File file = new File(path);
|
|
|
|
+
|
|
|
|
+ State state = valid(file);
|
|
|
|
+
|
|
|
|
+ if (!state.isSuccess()) {
|
|
|
|
+ return state;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ try {
|
|
|
|
+ BufferedOutputStream bos = new BufferedOutputStream(
|
|
|
|
+ new FileOutputStream(file));
|
|
|
|
+ bos.write(data);
|
|
|
|
+ bos.flush();
|
|
|
|
+ bos.close();
|
|
|
|
+ } catch (IOException ioe) {
|
|
|
|
+ return new BaseState(false, AppInfo.IO_ERROR);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ state = new BaseState(true, file.getAbsolutePath());
|
|
|
|
+ state.putInfo("size", data.length);
|
|
|
|
+ state.putInfo("title", file.getName());
|
|
|
|
+ return state;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public static State saveFileByInputStream(InputStream is, String path,
|
|
|
|
+ long maxSize) {
|
|
|
|
+
|
|
|
|
+ File tmpFile = getTmpFile();
|
|
|
|
+
|
|
|
|
+ byte[] dataBuf = new byte[2048];
|
|
|
|
+ BufferedInputStream bis = new BufferedInputStream(is, StorageManager.BUFFER_SIZE);
|
|
|
|
+
|
|
|
|
+ try {
|
|
|
|
+ BufferedOutputStream bos = new BufferedOutputStream(
|
|
|
|
+ new FileOutputStream(tmpFile), StorageManager.BUFFER_SIZE);
|
|
|
|
+
|
|
|
|
+ int count = 0;
|
|
|
|
+ while ((count = bis.read(dataBuf)) != -1) {
|
|
|
|
+ bos.write(dataBuf, 0, count);
|
|
|
|
+ }
|
|
|
|
+ bos.flush();
|
|
|
|
+ bos.close();
|
|
|
|
+
|
|
|
|
+ if (tmpFile.length() > maxSize) {
|
|
|
|
+ tmpFile.delete();
|
|
|
|
+ return new BaseState(false, AppInfo.MAX_SIZE);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ State state = saveTmpFile(tmpFile, path);
|
|
|
|
+
|
|
|
|
+ if (!state.isSuccess()) {
|
|
|
|
+ tmpFile.delete();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return state;
|
|
|
|
+
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ }
|
|
|
|
+ return new BaseState(false, AppInfo.IO_ERROR);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public static State saveFileByInputStream(InputStream is, String path) {
|
|
|
|
+ State state;
|
|
|
|
+
|
|
|
|
+ File tmpFile = getTmpFile();
|
|
|
|
+
|
|
|
|
+ byte[] dataBuf = new byte[2048];
|
|
|
|
+ BufferedInputStream bis = new BufferedInputStream(is, StorageManager.BUFFER_SIZE);
|
|
|
|
+
|
|
|
|
+ try {
|
|
|
|
+ BufferedOutputStream bos = new BufferedOutputStream(
|
|
|
|
+ new FileOutputStream(tmpFile), StorageManager.BUFFER_SIZE);
|
|
|
|
+
|
|
|
|
+ int count = 0;
|
|
|
|
+ while ((count = bis.read(dataBuf)) != -1) {
|
|
|
|
+ bos.write(dataBuf, 0, count);
|
|
|
|
+ }
|
|
|
|
+ bos.flush();
|
|
|
|
+ bos.close();
|
|
|
|
+
|
|
|
|
+ state = saveTmpFile(tmpFile, path);
|
|
|
|
+
|
|
|
|
+ if (!state.isSuccess()) {
|
|
|
|
+ tmpFile.delete();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return state;
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ return new BaseState(false, AppInfo.IO_ERROR);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private static File getTmpFile() {
|
|
|
|
+ File tmpDir = FileUtils.getTempDirectory();
|
|
|
|
+ String tmpFileName = (Math.random() * 10000 + "").replace(".", "");
|
|
|
|
+ return new File(tmpDir, tmpFileName);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private static State saveTmpFile(File tmpFile, String path) {
|
|
|
|
+ State state = null;
|
|
|
|
+ File targetFile = new File(path);
|
|
|
|
+
|
|
|
|
+ if (targetFile.canWrite()) {
|
|
|
|
+ return new BaseState(false, AppInfo.PERMISSION_DENIED);
|
|
|
|
+ }
|
|
|
|
+ try {
|
|
|
|
+ FileUtils.moveFile(tmpFile, targetFile);
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ return new BaseState(false, AppInfo.IO_ERROR);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ state = new BaseState(true);
|
|
|
|
+ state.putInfo("size", targetFile.length());
|
|
|
|
+ state.putInfo("title", targetFile.getName());
|
|
|
|
+
|
|
|
|
+ return state;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private static State valid(File file) {
|
|
|
|
+ File parentPath = file.getParentFile();
|
|
|
|
+
|
|
|
|
+ if ((!parentPath.exists()) && (!parentPath.mkdirs())) {
|
|
|
|
+ return new BaseState(false, AppInfo.FAILED_CREATE_FILE);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (!parentPath.canWrite()) {
|
|
|
|
+ return new BaseState(false, AppInfo.PERMISSION_DENIED);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return new BaseState(true);
|
|
|
|
+ }
|
|
}
|
|
}
|