一、前端实现方案(React + Antd)
import React, {
useState } from 'react';
import {
Upload, Button, Image, Carousel } from 'antd';
import {
UploadOutlined } from '@ant-design/icons';
const OFDUploadPreview = () => {
const [previewImages, setPreviewImages] = useState([]);
const customRequest = async ({
file, onSuccess }) => {
const formData = new FormData();
formData.append('file', file);
try {
const response = await fetch('http://localhost:8080/convert-ofd', {
method: 'POST',
body: formData
});
const result = await response.json();
if (result.success) {
setPreviewImages(result.images);
onSuccess(result, file);
}
} catch (error) {
console.error('Upload failed:', error);
}
};
return (
<div style={
{
padding: 24 }}>
<Upload
customRequest={
customRequest}
accept=".ofd"
showUploadList={
false}
>
<Button icon={
<UploadOutlined />}>上传OFD文件</Button>
</Upload>
{
}
{
previewImages.length > 0 && (
<div style={
{
marginTop: 20 }}>
<Carousel dotPosition="top">
{
previewImages.map((img, index) => (
<div key={
index}>
<Image
src={
`data:image/png;base64,${
img}`}
alt={
`Page ${
index + 1}`}
style={
{
maxWidth: '100%' }}
/>
</div>
))}
</Carousel>
</div>
)}
</div>
);
};
export default OFDUploadPreview;
二、后端Java实现方案(Spring Boot)
@RestController
@RequestMapping("/convert-ofd")
public class OfdConverterController {
@PostMapping(consumes = MediaType