diff --git a/src/main/java/com/corewing/app/modules/admin/biz/BizFirmwareController.java b/src/main/java/com/corewing/app/modules/admin/biz/BizFirmwareController.java index 0085d63..d7b2c70 100644 --- a/src/main/java/com/corewing/app/modules/admin/biz/BizFirmwareController.java +++ b/src/main/java/com/corewing/app/modules/admin/biz/BizFirmwareController.java @@ -93,8 +93,8 @@ public class BizFirmwareController { */ @PostMapping("/uploadFile") @ResponseBody - public Result uploadFile(MultipartFile file) { - return Result.success(); + public Result uploadFile(MultipartFile file, Long id) { + return Result.isBool(firmwareService.uploadFile(file, id)); } } diff --git a/src/main/java/com/corewing/app/service/FirmwareService.java b/src/main/java/com/corewing/app/service/FirmwareService.java index 294960d..222ebab 100644 --- a/src/main/java/com/corewing/app/service/FirmwareService.java +++ b/src/main/java/com/corewing/app/service/FirmwareService.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.corewing.app.common.Result; import com.corewing.app.entity.Firmware; +import org.springframework.web.multipart.MultipartFile; /** * 固件 Service 接口 @@ -24,4 +25,12 @@ public interface FirmwareService extends IService { * @return 固件信息 */ Firmware getByFirmwareName(String firmwareName); + + /** + * 上传文件 + * @param file + * @param id + * @return + */ + boolean uploadFile(MultipartFile file, Long id); } diff --git a/src/main/java/com/corewing/app/service/impl/FirmwareServiceImpl.java b/src/main/java/com/corewing/app/service/impl/FirmwareServiceImpl.java index ff87dbc..7c2edd9 100644 --- a/src/main/java/com/corewing/app/service/impl/FirmwareServiceImpl.java +++ b/src/main/java/com/corewing/app/service/impl/FirmwareServiceImpl.java @@ -7,8 +7,12 @@ import com.corewing.app.common.page.PageContext; import com.corewing.app.entity.Firmware; import com.corewing.app.mapper.FirmwareMapper; import com.corewing.app.service.FirmwareService; +import com.corewing.app.util.OSSUploadUtil; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; /** * 固件 Service 实现类 @@ -32,5 +36,18 @@ public class FirmwareServiceImpl extends ServiceImpl i return this.getOne(wrapper); } + @Override + public boolean uploadFile(MultipartFile file, Long id) { + try { + String downloadUrl = OSSUploadUtil.uploadFile(file.getInputStream(), "/"); + Firmware firmware = getById(id); + firmware.setDownloadUrl(downloadUrl); + updateById(firmware); + } catch (IOException e) { + throw new RuntimeException(e); + } + return false; + } + } diff --git a/src/main/resources/templates/admin/biz/firmware/index.html b/src/main/resources/templates/admin/biz/firmware/index.html index eee16fa..065219e 100644 --- a/src/main/resources/templates/admin/biz/firmware/index.html +++ b/src/main/resources/templates/admin/biz/firmware/index.html @@ -219,6 +219,7 @@ id="firmwareFile" name="file" accept=".bin" + ref="firmwareFileRef" >
支持 .bin 格式,单个文件不超过 100MB
@@ -499,20 +500,59 @@ }, // 打开文件上传模态框 openUploadModal(item) { + this.addOrEditDto = item; this.modalInstances['uploadFileModal'].show(); }, - uploadFile() { - request.put("/biz/user/resetPasswordRequest", this.resetPasswordDto) - .then((res) => { - if (res.code === 200) { - $message.success('修改成功!', 500); - this.modalInstances['resetPwdModal'].hide(); - } else { - alert('修改失败!'); + async uploadFile() { + // 1. 获取选中的文件 + const fileInput = this.$refs.firmwareFileRef; + const file = fileInput.files[0]; + + // 2. 校验文件(格式、大小) + if (!file) { + alert("请选择 .bin 格式的固件文件"); + return; + } + if (file.type !== "application/octet-stream" && !file.name.endsWith(".bin")) { + alert("仅支持 .bin 格式文件"); + return; + } + if (file.size > 100 * 1024 * 1024) { // 100MB + alert("文件大小不能超过 100MB"); + return; + } + + const formData = new FormData(); + formData.append("file", file); + formData.append("id", this.addOrEditDto.id); + + // 4. 发送上传请求(Axios) + try { + const response = await axios({ + url: "/biz/firmware/uploadFile", + method: "POST", + data: formData, + headers: { + "Content-Type": "multipart/form-data" + }, + onUploadProgress: (progressEvent) => { + const progress = (progressEvent.loaded / progressEvent.total) * 100; + console.log(`上传进度:${progress.toFixed(2)}%`); } - this.resetPasswordDto = {}; }); + if (response.data.success) { + $message.success('固件上传成功'); + this.$refs.firmwareFileRef.value = ""; + this.modalInstances['uploadFileModal'].hide(); + } else { + $message.error("上传失败:" + response.data.message); + } + } catch (error) { + console.error("上传出错:", error); + $message.error("网络异常,上传失败"); + } + }, // 打开新增模态框 openAddModal() {