Files
ani-rss/ani-rss-application/src/main/java/ani/rss/action/UploadAction.java
2025-12-13 09:26:20 +08:00

54 lines
1.8 KiB
Java

package ani.rss.action;
import ani.rss.entity.Result;
import ani.rss.util.other.ConfigUtil;
import ani.rss.web.action.BaseAction;
import ani.rss.web.annotation.Auth;
import ani.rss.web.annotation.Path;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.net.multipart.MultipartFormData;
import cn.hutool.core.net.multipart.UploadFile;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.http.server.HttpServerRequest;
import cn.hutool.http.server.HttpServerResponse;
import lombok.extern.slf4j.Slf4j;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
/**
* 上传文件
*/
@Slf4j
@Auth
@Path("/upload")
public class UploadAction implements BaseAction {
@Override
public void doAction(HttpServerRequest request, HttpServerResponse response) throws IOException {
String type = request.getParam("type");
MultipartFormData multipart = request.getMultipart();
UploadFile file = multipart.getFile("file");
if (file.size() > 1024 * 1024 * 50) {
resultErrorMsg("文件大小超过 50M");
return;
}
byte[] fileContent = file.getFileContent();
if ("getBase64".equals(type)) {
resultSuccess(Base64.encode(fileContent));
return;
}
String s = SecureUtil.md5(new ByteArrayInputStream(fileContent));
String fileName = file.getFileName();
String saveName = s + "." + FileUtil.extName(fileName);
File configDir = ConfigUtil.getConfigDir();
FileUtil.mkdir(configDir + "/files/" + s.charAt(0));
FileUtil.writeBytes(fileContent, configDir + "/files/" + s.charAt(0) + "/" + saveName);
resultSuccess(new Result<>().setMessage("上传完成").setData(s.charAt(0) + "/" + saveName));
}
}