InputStream转MultipartFile

落日映苍穹つ 2023-10-10 13:48 111阅读 0赞
  1. import org.apache.commons.fileupload.FileItem;
  2. import org.apache.commons.fileupload.FileItemFactory;
  3. import org.apache.commons.fileupload.disk.DiskFileItemFactory;
  4. import org.springframework.web.multipart.MultipartFile;
  5. import org.springframework.web.multipart.commons.CommonsMultipartFile;
  6. import org.springframework.http.MediaType;
  7. //调用放 originalFilename: 文件名 123.jpg需要带后缀
  8. MultipartFile multipartFile = getMultipartFile(inputStream, originalFilename);
  9. /**
  10. * 获取封装得MultipartFile
  11. *
  12. * @param inputStream inputStream
  13. * @param fileName fileName
  14. * @return MultipartFile
  15. */
  16. public MultipartFile getMultipartFile(InputStream inputStream, String fileName) {
  17. FileItem fileItem = createFileItem(inputStream, fileName);
  18. //CommonsMultipartFile是feign对multipartFile的封装,但是要FileItem类对象
  19. return new CommonsMultipartFile(fileItem);
  20. }
  21. /**
  22. * FileItem类对象创建
  23. *
  24. * @param inputStream inputStream
  25. * @param fileName fileName
  26. * @return FileItem
  27. */
  28. public FileItem createFileItem(InputStream inputStream, String fileName) {
  29. FileItemFactory factory = new DiskFileItemFactory(16, null);
  30. String textFieldName = "file";
  31. FileItem item = factory.createItem(textFieldName, MediaType.MULTIPART_FORM_DATA_VALUE, true, fileName);
  32. int bytesRead = 0;
  33. byte[] buffer = new byte[8192];
  34. OutputStream os = null;
  35. //使用输出流输出输入流的字节
  36. try {
  37. os = item.getOutputStream();
  38. while ((bytesRead = inputStream.read(buffer, 0, 8192)) != -1) {
  39. os.write(buffer, 0, bytesRead);
  40. }
  41. inputStream.close();
  42. } catch (IOException e) {
  43. log.error("Stream copy exception", e);
  44. throw new IllegalArgumentException("文件上传失败");
  45. } finally {
  46. if (os != null) {
  47. try {
  48. os.close();
  49. } catch (IOException e) {
  50. log.error("Stream close exception", e);
  51. }
  52. }
  53. if (inputStream != null) {
  54. try {
  55. inputStream.close();
  56. } catch (IOException e) {
  57. log.error("Stream close exception", e);
  58. }
  59. }
  60. }
  61. return item;
  62. }

发表评论

表情:
评论列表 (有 0 条评论,111人围观)

还没有评论,来说两句吧...

相关阅读