公司數據遷移,一些附件無法直接導入到新系統,然后需要將附件從原系統下載到本地再上傳到新系統,系統平臺為 jira ,這里寫了一個批量上傳的代碼,采用的是 curl 的方式,其中需要獲取本地文件路徑:
public static ArrayList<String> getFiles(String path) {
ArrayList<String> files = new ArrayList<>();
File file = new File(path);
if (file.exists() && file.isDirectory() && file.canRead()) {
File[] tempList = file.listFiles();
for (int i = 0; i < tempList.length; i++) {
if (tempList[i].isFile()) {
files.add(tempList[i].toString());
}
}
return files;
}
return null;
}
這時候出現了一個問題,文件名包含中文,debug 的時候發現獲取到的文件名出現了亂碼




看了很多文章說需要轉碼,一一嘗試沒什么用,這時候獲取本地編碼方式發現出現了一個很奇怪的編碼:Cp1252,最后終于找到問題所在,是eclipse 默認編碼的問題(別問我為什么不用 IDEA,公司不給用?。。?,解決方式如圖:
Window –> preference –>


將編碼格式修改為 UTF-8,再次運行程序就沒有文件名亂碼的問題了。
批量上傳:
public static String execCurl(String issueKey, String file) {
HashMap<String, String> info = GetPropertiesUtil.getInfo();
String user = info.get("user");
String password = info.get("password");
String domain = info.get("domain");
String[] cmds = { "curl", "-D-", "-u", user + ":" + password, "-X", "POST", "-H", "X-Atlassian-Token: no-check",
"-F", "file=@" + file, domain + issueKey + "/attachments" };
ProcessBuilder process = new ProcessBuilder(cmds);
Process p;
try {
p = process.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
StringBuilder builder = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
builder.append(line);
builder.append(System.getProperty("line.separator"));
}
return builder.toString();
} catch (IOException e) {
System.out.print("error");
e.printStackTrace();
}
return null;
}
注意:curl 命令要存到一個字符串數組內。
版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。
發表評論
請登錄后評論...
登錄后才能評論