oapi-sdk-java icon indicating copy to clipboard operation
oapi-sdk-java copied to clipboard

任务附件上传丢失文件名

Open jiacheo opened this issue 1 year ago • 4 comments

你们SDK 底层处理是啥逻辑,没有获取文件名之类的,上传到任务里之后,所有附件都显示为 unknown

image

jiacheo avatar Oct 24 '24 10:10 jiacheo

image 这个 ReqTranslator 貌似完全不设置fileName 啊。。你好歹把文件名读取一下吧。。。

jiacheo avatar Oct 24 '24 12:10 jiacheo

image 在 OkHttpTransport 中,读取的是FormDataFile.getFileName 而不是 finalFile.getName(),所以前面没设置,后面就都是 unknown 了。

jiacheo avatar Oct 25 '24 02:10 jiacheo

image

FormDataFile 这个代码是实习生写的吗? setFileName 变成了 this.fieldName = ...., 眼神不好咋看出来,这种 SDK 性质的包,用自动生成工具不好吗?这样才能跟实际 API保持完全一致性,靠人总会出问题。

jiacheo avatar Oct 25 '24 02:10 jiacheo

workaround:

仿照 com.lark.oapi.core.httpclient.OkHttpTransport 实现一个 IHttpTransport, 将其中构建 multipart 的代码改成

           for (FormDataFile file : ((FormData) body).getFiles()) {
                final File finalFile = file.getFile();
                builder.addFormDataPart(file.getFieldName(),
                        finalFile.getName()
                        , RequestBody.create(MediaType.parse("application/octet-stream"), finalFile));
            }

在构建 Client 的时候,使用 Client.newBuilder(...).httpTransport(new 自定义的Transport()).build()

相当于不使用系统自带的 OKHttpTransport,用自定义的。

注意这个 workaround 只能说上传之后不会 unknown,但不支持自定义 filename,根据实际被上传到文件名来显示。但至少是一个 workaround 了。

jiacheo avatar Oct 25 '24 03:10 jiacheo