由于服务请求报文是一个文本,无法直接传送二进制的文件内容,因此必须采用某种转换机制将二进制的文件内容转换为字符串。jpg@Base64.encodeBase64String(fileToBinary)文件内容采用BASE64算法进行编码,这样二进制的文件内容就可以转换为一个字符串,两者“@”字符分隔。服务端接收到上传的文件后,即可解析出文件的类型和文件的内容。
Rop定义了一个UploadFile,代表一个上传的文件。
@IgnoreSign
public class UploadFile {
private String fileType;
private byte[] content;
/**
* 根据文件内容构造
*
* @param content
*/
public UploadFile(String fileType, byte[] content) {
this.content = content;
this.fileType = fileType;
}
/**
* 根据文件构造
* @param file
*/
public UploadFile(File file) {
try {
this.content = FileCopyUtils.copyToByteArray(file);
this.fileType = file.getName().substring(file.getName().lastIndexOf('.')+1);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public String getFileType() {
return fileType;
}
public byte[] getContent() {
return content;
}
}
UploadFile类定义处标注了@IgnoreSign注解,签名算法会忽略所有的UploadFile属性。客户端无须将上传文件的参数纳入到签名参数列表中。Rop定义了一个服务于UploadFile中的转换器UploadFileConverter。
弊端是每次只可以上传一个文件。那么怎么才能一次上传多个文件(图片)呢?
1.定义一个UploadRequest
public class UploadRequest extends AbstractRopRequest {
//单张上传
@IgnoreSign