H5W3
当前位置:H5W3 > 其他技术问题 > 正文

七牛java SDK上传策略没有生效

  1. 使用七牛java SDK qiniu-java-sdk-7.0.11.jar包进行上传测试。如果不设置上传策略,一切正常。如果设置上传策略,上传也是正常,但是上传策略无效。
    设置了:

    fsizeLimit=1000000
    mimeLimit=image/*

使用这个策略生成token,上传文件的大小是4820861,文件的格式不是图片文件是普通二进制格式的文件,但是上传还是能正常完成,没有给出任何不符合上传策略的错误提示。

  1. 测试部分代码如下

public String getToken(Long fsizeLimit, String mimeLimit, Integer deleteAfterDays) {
        StringMap policy = new StringMap();
        if (null != fsizeLimit && fsizeLimit > 0) {
            policy.put("fsizeLimit", fsizeLimit);
        }
        if (!StringUtils.isEmpty(mimeLimit)) {
            policy.put("mimeLimit", mimeLimit);
        }
        if (null != deleteAfterDays && deleteAfterDays > 0) {
            policy.put("deleteAfterDays", deleteAfterDays);
        }

        Auth auth = Auth.create("xxxxxxxxxxxxx", "yyyyyyyyyyyyyyy");
        return auth.uploadToken("test");
    }
    
    public void doUpload(File file, String brokerpath, String token) throws IOException {
        Recorder recorder = new FileRecorder(brokerpath);
        UploadManager uploadManager = new UploadManager(recorder);
    
        Response res = uploadManager.put(file, file.getName(), token);
        System.out.println(res.toString());
    }

    public static void main(String[] args) throws IOException {
        QiniuUploadTest t = new QiniuUploadTest();
        String token = t.getToken(1000000L, "image/*", 1);
        System.out.println("TOKEN:" + token);
        File file = new File("d:/test.pqt");
        System.out.println("File size:" + file.length());
        t.doUpload(file, "d:/tmp", token);
    }
  1. 执行结果

TOKEN:yEHtUCAddqj0IGbHqMjE2x7OsuMDRX782QAzsfhp:v_2pqML2YSnwDb4S9VYAvxkPjno=:eyJzY29wZSI6ImRsenRjIiwiZGVhZGxpbmUiOjE0ODcxMzg5NDR9
File size:4820861
{ResponseInfo:com.qiniu.http.Response@587d1d39,status:200, reqId:gRYAAG38kZa2XaMU, xlog:s.ph;s.ph;PFDS;PFDS:1;PTFDM:20;s.gh;PFDS/613;s.gh;PFDS/613;s.gh/EOF;PFDS/620;AUTHPROXY_xs_out:5/620;PTFDM:5;PTFDS;rdb.g:1/no such key;DBD:1/404;v4.exist:2/Document not found;rs29_4.ins;qtbl.ins:3;mc.s;RS:4;rs.put:9;UP:55;UP:56, xvia:, adress:up.qiniu.com/115.231.97.46:80, duration:0.000000 s, error:null}
  1. 上传文件能下载

clipboard.png

  1. 使用nodeJS版的SDK,发现上传策略能正常生效。使用最新的java版的SDK Release v7.2.4版本,上传策略还是不能生效。

回答:

代码有问题,策略设置了,但是在获取token的时候没有使用。

public String getToken(Long fsizeLimit, String mimeLimit, Integer deleteAfterDays) {
.
.
.
return auth.uploadToken("test", null, 3600, policy);

回答:

/**

 * 限制上传的文件类型和大小
 * @param bucketName
 * @param target
 */
public static void qualifyFileType(String bucketName, File target) {
    Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);
    Configuration cfg = new Configuration(Zone.zone0());
    UploadManager uploadMgr = new UploadManager(cfg);
    StringMap putPolicy = new StringMap();
    putPolicy.put("fsizeMin", 1024)                        //文件大小最小为 1KB
             .put("fsizeLimit", 1024 * 1024 * 10)        //文件大小最大为 10M
             .putNotEmpty("mimeType", "image/gif");        //文件类型为gif图片,  其他jpg、jpeg、png 不能上传, 所有图片 设置为 image/*
    //获取upload token, 在token中设置上传策略中的 fsizeMin, fsizeLimit, mimeType
    String token = auth.uploadToken(bucketName, "qualify11/" + target.getName(), 3600, putPolicy);
    try {
        Response resp = uploadMgr.put(target, "qualify11/" + target.getName(), token);
        System.out.println(resp.statusCode + ":" +resp.bodyString());
    } catch (QiniuException e) {
        System.out.println(e.code() + ":" + e.getMessage());
        e.printStackTrace();
    }
}

本文地址:H5W3 » 七牛java SDK上传策略没有生效

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址