SWFUpload Java版文件上传解决方案

Java 项目里的文件上传要搞得舒服点?SWFUpload的 Java 版还挺值得一试的。虽然是老牌方案,但在多文件上传、大文件断点续传、进度条这些需求面前,它还挺能打的。

多文件上传、进度条显示、断点续传这些功能,SWFUpload一口气都能搞定。用过的都知道,它不光支持预览,还能限制文件类型和大小,前端交互也比较灵活。

Java 后端这边,其实配合也不难。不管你用的是老牌的 Servlet 还是现在常用的 Spring MVC,上传逻辑主要就围绕 MultipartFile 来——拿到文件、存文件、出错返回信息,思路清晰,改起来也方便。

比如前端这段 JS 初始化:

var flashUploader = new SWFUpload({
  upload_url: "your/upload/url",
  file_post_name: "file",
  file_size_limit : "5000 KB",
  file_types : "*.jpg;*.png;*.gif",
  file_types_description : "Image Files",
  button_image_url : "button.png",
  button_width : 69,
  button_height : 22,
  button_text : '选择图片',
  button_text_style : '.button { font-size: 16px; }',
  onUploadSuccess : function(file, data, response) {
    // 上传成功逻辑
  },
  onUploadError : function(file, errorCode, errorMsg, errorString) {
    // 上传失败逻辑
  }
});

后端如果是 Spring MVC,写法差不多是这样:

@Controller
public class FileUploadController {
  @RequestMapping(value = "/upload", method = RequestMethod.POST)
  public @ResponseBody String handleFileUpload(@RequestParam("file") MultipartFile file) {
    if (!file.isEmpty()) {
      try {
        byte[] bytes = file.getBytes();
        BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(new File("upload-dir/" + file.getOriginalFilename())));
        stream.write(bytes);
        stream.close();
        return "文件已上传";
      } catch (Exception e) {
        return "上传失败: " + e.getMessage();
      }
    } else {
      return "选择文件";
    }
  }
}

实测下来,表现还不错,响应快、容错强,适合需要搞个“稳上传”的项目场景。如果你用的是老项目、还在兼容 Flash,那配一下试试也不亏。

rar 文件大小:1.02MB