想在controller直接拿到上传文件的流对象怎么做?

目前的jfinal通过getFile(),可以直接把上传的文件保存到upload文件夹。

现在因为要直接把上传文件放到MinIO里,如果通过getFile(),就是先把上传的文件写到服务器上,然后再调用MinIO接口把文件发送到MinIO上。MinIO可以传递InputStream直接把流保存起来。这样就不用先写到服务器上,而直接把上传的文件流写到MinIO里。

这中情况下,就需要拿到上传的文件流(可能会一次上传多个文件,那就得拿到多个文件流)和上传的原始文件名。并且拿到流后,还得能正确解析到form表单的数据。@JFinal @杜福忠 能提供一个思路或则方法吗?感谢!

评论区

杜福忠

2023-02-15 21:18

记得网上有插件可以解析request拿到单文件流的,忘记插件名字了。
不过自己撸一个也很简单的,https://jfinal.com/doc/3-11
cos源码里面有解析http文件协议的代码,直接复制出来,改改FilePart就可以了。
还可以用其他软件比如:JuiceFS 它可以把 上传文件的目录挂载到OSS上,这个应该是Minio类软件。这样就不动JF的代码,getFiles的时候new MultipartRequest(request)就直接传到云服务器了,读取也是正常用File就可以

杜福忠

2023-02-15 21:19

https://juicefs.com/zh-cn/download/

caoxusheng

2023-02-16 14:17

@杜福忠 大佬问个问题 Action方法@Para("")注入实体类,实体类有UploadFile和其他字符串,注入不进去是咋回事,注入没有UploadFile的就能注入进去

杜福忠

2023-02-16 14:40

@caoxusheng 啥版本啊?3.5以下?

caoxusheng

2023-02-16 14:52

杜福忠

2023-02-16 15:28

@caoxusheng
https://jfinal.com/doc/3-11 文档说了要先调用getFile,哪里都一样。参数注入有 File、UploadFile 参数的 action,会自动优先获取 File、UploadFile 对象。但是不是bean里面

chcode

2023-02-16 16:27

new FileInputStream(getFile())不可以吗?

zzutligang

2023-02-19 13:57

@chcode 只要调用getFile,就是先用cos把文件存储在服务器本地了,我的需求是直接从request拿到上传文件文件流,不通过服务器端本地,直接接到minio上。

zzutligang

2023-02-19 14:00

@杜福忠 感谢,看来只能自己撸一个从request解析出来文件流了。不过还是希望jfinal能提供一个这样的接口,从request解析出来上传文件流后交给用户自己处理。

久伴轻尘

2023-02-20 11:33

@zzutligang 我前段时间也在搞minio上传 建议你直接使用minio的上传 你可以获取minio的上传url 然后直接进行传输

星矢

2023-03-16 17:02

先 getFile() 在 delete掉, 不就相当于不在你服务器上存储了嘛

热门反馈

扫码入社