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

UploadManager.filterParam 与FormUploader. buildParams() 逻辑冲突

Open hzdjulytech opened this issue 5 years ago • 6 comments

[7.2.0, 7.2.99] FormUploader. buildParams() 中 Object object = params.get("filename"); 无法取到自定义值,已被 UploadManager.filterParam 中过滤掉了 且自定义名称优先级不应低于默认值 filename = file.getName();

hzdjulytech avatar Jan 03 '20 10:01 hzdjulytech

抱歉,如果是自定义的参数值 key 需要以x:为前缀来进行定义,例如 https://github.com/qiniu/java-sdk/blob/master/src/main/java/com/qiniu/storage/UploadManager.java#L136 的描述,具体我们来进行文档的补充

forrest-mao avatar Jul 21 '20 15:07 forrest-mao

仅七牛内部员工可见:https://jira.qiniu.io/browse/TS-986

forrest-mao avatar Jul 21 '20 15:07 forrest-mao

pr:https://github.com/qiniu/java-sdk/issues/468

peteryuanpan avatar Aug 13 '20 09:08 peteryuanpan

那请问怎么才能使用这个$(fname)变量,我无论怎么设置,都获取不到。

还是说这个变量不是用来设置回传原文件名的? 如果 fnamekey, hash 一模一样的话,我拿它有什么用?

如果不是用来存原文件名的,你取名叫 f(ile)name 不是误导人?

image 代码是这样的:

    String path = "C:\\Users\\hunan\\Downloads\\taylor-swift-1.jpg";
    File file = new File(path);
    FileInputStream fi = new FileInputStream(file);
    byte[] bytes = StreamUtils.copyToByteArray(fi);
    StringMap params = new StringMap();
    params.put("filename", file.getName());
    params.put("fileName", file.getName());
    params.put("x:fileName", file.getName());
    params.put("x:filename", file.getName());
    Response put = um.put(bytes, null, uptoken(), params, null, false);
    System.out.println(put.bodyString());

returnBody 是这样的

  policy.put("returnBody", "{\"key\":\"$(key)\",\"hash\":\"$(etag)\",\"fname\":\"$(fname)\",\"ext\":\"$(ext)\"}");

返回的是这样的:

{"key":"Fg0Zq1_buk-Ah_g0rIReMoomyslw","hash":"Fg0Zq1_buk-Ah_g0rIReMoomyslw","fname":"defaultFilename","ext":".jpg"}

howareyouo avatar May 04 '22 06:05 howareyouo

@howareyouo 官方文档声明的是 api 的接口,针对 java sdk 的使用姿势您可以使用自定义变量的方式,即 :

    StringMap params = new StringMap();
    params.put("x:filename", file.getName());
    Response put = um.put(bytes, null, uptoken(), params, null, false);

这样设置再返回的信息中,会增加一条 json 数据 java

YangSen-qn avatar May 05 '22 02:05 YangSen-qn

@howareyouo 官方文档声明的是 api 的接口,针对 java sdk 的使用姿势您可以使用自定义变量的方式,即 :

    StringMap params = new StringMap();
    params.put("x:filename", file.getName());
    Response put = um.put(bytes, null, uptoken(), params, null, false);

这样设置再返回的信息中,会增加一条 json 数据 java

已经解决了,感觉用 saveKey 是最好的方案了

七牛文档写的都是点到为止,其余都靠自己摸索,真心累啊

howareyouo avatar May 07 '22 01:05 howareyouo