51,411
社区成员
发帖
与我相关
我的任务
分享 从代码方面比较好解决 获取了路径以后加个判断如果路径有 ""
就给他替换成 "/"
import java.net.URLEncoder;
URLEncoder.encode("URL","UTF-8");
1.因为是个C/S项目,代码部署到linux服务上后,一部分代码会在service容器内执行,另外一部分代码在client容器内执行。楼主刚接触行业不久,之前都是做web项目,不了解这一点。实际上我的代码放在了client容器内,尽管部署在了服务器上,但代码依旧是在Windows环境下的的client端执行。所以/../..这种绝对路径肯定是获取不到。
2.即便部署正确之后,也无法通过传入/opt/..这种绝对路径直接获取流。因为java程序没有linux权限。同理,通过Runtime.getRuntime().exec(cmd);的方式执行linux命令也无法获取流,该操作要获取root权限。
3.我解决的方式是发送http请求,来获取流。实现方式要看具体环境,这只是一种思路。
httpClient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost(url);
InputStream inputStream = new FileInputStream(filePath);
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setCharset(Charset.forName("UTF-8"));
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
builder.addBinaryBody(name, inputStream, ContentType.create("multipart/form-data", Consts.UTF_8), fileName);
这是我写的代码,在Windows环境下,读取绝对路径没什么问题。但在linux下绝对路径,斜杠会变成反斜杠,从而路径找不到。拿不到文件