上传
上传文件分两种
- ①要处理的文件本身存在当前文件系统下
- ②要处理的文件只是个临时文件,或者说是文件流的形式存在
在以下代码中会分别标注
private static void upattach() {
string uploadurl = "http://192.168.1.10/upload";
string appid = "";
string accesskey = "";
string filepath = "";
string originalfilename = "test.xlsx";
long currenttimemillis = system.currenttimemillis();
string timemillis = string.valueof(currenttimemillis);
// 文件路径
string base64key = base64.encodebase64string(filepath.getbytes());
string sign = getsign(appid, base64key, timemillis, accesskey);
multivaluemap<string, object> params = new linkedmultivaluemap<>(3);
// @deprecated
// write to temporary file and then process, need to be deleted and tends to generate too much garbage
// path tempfile = files.createtempfile("upload-file", ".txt");
// files.write(tempfile, file.getbytes());
// params.add("file", new filesystemresource(tempfile.tofile()));
// ============================== 这里是重点 ==============================
// ① 文件存在,直接获取文件输入流即可
file file = new file("c:\\test.xlsx");
params.add("file", new inputstreamresource(file.getinputstream(), originalfilename));
// ② 临时文件,如multipartfile,获取其字节流来处理
multipartfile multipartfile = null;
byte[] bytearray = multipartfile.getbytes();
bytearrayresource bytearrayresource = new bytearrayresource(bytearray) {
@override
public string getfilename() {
// 这里不指定文件名的话,上传过去的文件名会乱码
return originalfilename;
}
};
params.add("file", bytearrayresource);
// ========================================================================
// 其他参数按需采用
// key为文件路径
params.add("key", filepath);
httpheaders headers = new httpheaders();
headers.setcontenttype(mediatype.multipart_form_data);
headers.add("x-fs-timestamp", timemillis);
headers.add("x-fs-appid", appid);
headers.add("x-fs-sign", sign);
httpentity<multivaluemap<string, object>> requestentity = new httpentity<>(params, headers);
resttemplate resttemplate = springutils.getbean(resttemplate.class);
resttemplate.postforobject(uploadurl, requestentity, jsonobject.class);
}
/** 加密 **/
private static string getsign(string appid, string base64key, string timestamp, string accesskey) {
string sign = appid + "|" + base64key + "|" + timestamp;
return new hmacutils(hmacalgorithms.hmac_sha_256, accesskey).hmachex(sign);
}下载
下载只需要注意返回值为byte[]即可:
// resource为文件唯一标识,按需采用
public static final byte[] dwattach(string resource) {
string appid = "";
string accesskey = "";
long currenttimemillis = system.currenttimemillis();
string timemillis = string.valueof(currenttimemillis);
string base64key = base64.encodebase64string(resource.getbytes());
string sign = getsign(appid, base64key, timemillis, accesskey);
string downloadurl = "http://192.168.1.10?appid={appid}×tamp={timestamp}&sign={sign}";
hashmap<string, object> urivariables = new hashmap<>(5);
urivariables.put("appid", appid);
urivariables.put("timestamp", timemillis);
urivariables.put("sign", sign);
resttemplate resttemplate = springutils.getbean(resttemplate.class);
return resttemplate.getforobject(downloadurl, byte[].class, urivariables);
}后续可通过new bytearrayinputstream(byte[])转换成流,或者org.springframework.util.filecopyutils, org.apache.commons.io.fileutils等工具类,进行其他处理。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论