上传文件到服务器通用代码
本帖最后由 Winny 于 2024-9-14 12:12 编辑背景:SpreadJS作为前端控件,不会直接将文件或者文件中的部分数据保存到数据库中,只是提供获取当前文件或者文件中的部分数据的API,接下来需要采用前后端开发过程中常见的http请求形式,将目标数据传递给服务端,服务端再进行保存。
在SpreadJS中,以文件保存为例,提供了三种文件格式,分别是sjs、ssjson和xlsx文件格式。其中生成ssjson和xlsx调用的api为:
// 将spread导出为xlsx、ssjson、csv文件。
spread.export(function (blob) {
//这里blob即为生成的excel或ssjson文件blob
}, function (e) {
console.log(e);
}, {
fileType: GC.Spread.Sheets.FileType.excel
});接下来我们来看一个前端上传文件的通用代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Upload Excel File</title>
</head>
<body>
<h1>Upload Excel File</h1>
<input type="file" id="fileInput" accept=".xlsx">
<button onclick="uploadFile()">Upload</button>
<script>
function uploadFile() {
const fileInput = document.getElementById('fileInput');
const file = fileInput.files; //这里的file其实就是spread.export方法回调中的blob,可以使用new File(,"filename.xlsx")将blob转为file对象,也可以直接使用blob
if (!file) {
alert('Please select a file to upload.');
return;
}
const formData = new FormData();
formData.append('file', file);
fetch('/upload', {
method: 'POST',
body: formData
})
.then(response => response.json())
.then(data => {
alert(data.message);
})
.catch(error => {
console.error('Error:', error);
alert('Upload failed.');
});
}
</script>
</body>
</html>不难发现,其实我们只需要将spread中export方法成功回调的对象传递给fetch请求携带的formData即可。同理sjs文件也是类似的,只不过spreadjs中生成sjs文件的形式与生成xlsx文件的方法略有不同。生成sjs文件的代码如下:
// 将spread保存为sjs文件。
spread.save(function (blob) {
//接下来将blob直接传递给fetch请求的formData即可。
}, function (e) {
console.log(e);
});发送完成后,接下来就是服务端存储了,对于文件,一般采用存储在文件服务器上,数据库直接存文件所在地址即可。我们以java+Spring Boot为例,一个通用的写文件方法如下:
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import org.springframework.stereotype.Controller;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
@Controller
public class FileUploadController {
@PostMapping("/upload")
@ResponseBody
public String singleFileUpload(@RequestParam("file") MultipartFile file,
RedirectAttributes redirectAttributes) {
if (file.isEmpty()) {
return "{\"message\":\"Please select a file to upload.\"}";
}
try {
// Get the file and save it somewhere
byte[] bytes = file.getBytes();
Path path = Paths.get("uploads/" + file.getOriginalFilename());
Files.write(path, bytes);
redirectAttributes.addFlashAttribute("message",
"You successfully uploaded '" + file.getOriginalFilename() + "'");
} catch (IOException e) {
e.printStackTrace();
return "{\"message\":\"Upload failed.\"}";
}
return "{\"message\":\"Upload successful.\"}";
}
}
代码其实很简单,文件上传属于前后端常见交互请求,我们唯一要做的就是将SpreadJS生成的文件做好传递即可。
页:
[1]