概要
文件上传后调用远程接口发送
整体架构流程
技术名词解释
技术细节
private static String getFileNameFromUrl(String urlString) {
// 从URL中提取文件名
int lastSlashIndex = urlString.lastIndexOf('/');
if (lastSlashIndex != -1 && lastSlashIndex < urlString.length() - 1) {
return urlString.substring(lastSlashIndex + 1);
}
return "unknown-file";
}
private static String getContentType(URLConnection connection) {
// 获取文件类型
String contentType = connection.getContentType();
if (contentType == null) {
return "application/octet-stream";
}
return contentType;
}
public static MultipartFile urlToMultipartFile(String urlString) {
try {
// 创建URL对象
URL url = new URL(urlString);
// 打开连接
URLConnection connection = url.openConnection();
// 获取输入流
InputStream inputStream = connection.getInputStream();
// 读取文件内容
byte[] content = StreamUtils.copyToByteArray(inputStream);
// 获取文件名
String fileName = getFileNameFromUrl(urlString);
// 创建MockMultipartFile对象
MultipartFile multipartFile = new MockMultipartFile(fileName, fileName, getContentType(connection), content);
// 关闭输入流
inputStream.close();
return multipartFile;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
@Override
public String upload(String fileUrl) {
MultipartFile multipartFile = urlToMultipartFile(fileUrl);
String name = multipartFile.getOriginalFilename();
String[] split = name.split("\\.");
String body = "";
File tempFile = null;
try {
tempFile = File.createTempFile(split[0], "." + split[1]);
multipartFile.transferTo(tempFile);
body = HttpRequest.post("https:////////////")
.header("Authorization", midKey)
.header(HttpHeaders.CONTENT_TYPE, "multipart/form-data")
// .header(HttpHeaders.CACHE_CONTROL, "no-cache")
.form("file", tempFile)
.execute()
.body();
} catch (Exception e) {
log.error("上传文件失败", e);
} finally {
if (tempFile != null) {
tempFile.delete();
}
}
JSONObject task = JSONObject.parseObject(body);
return task.get("url").toString();
}
552






