以下是更新后的代码:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
import org.springframework.web.multipart.MultipartFile;
public class ApkDownloadAndUpload {
public static void downloadAndUploadApk(String urlStr) {
if (!isValidApkUrl(urlStr)) {
System.out.println("Invalid URL. Only APK and RPK files are allowed.");
return;
}
try {
URL url = new URL(urlStr);
URLConnection connection = url.openConnection();
InputStream inputStream = connection.getInputStream();
String originalFileName = getFileNameFromUrl(urlStr);
File tempFile = File.createTempFile("temp", getExtension(urlStr), new File("tempFolder"));
tempFile.renameTo(new File("tempFolder/" + originalFileName));
OutputStream outputStream = new FileOutputStream(tempFile);
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = inputStream.read(buffer))!= -1) {
outputStream.write(buffer, 0, bytesRead);
}
inputStream.close();
outputStream.close();
// 将临时文件转换为 MultipartFile 类型并调用已有的 uploadApk 方法
uploadApk(toMultipartFile(tempFile));
} catch (IOException e) {
e.printStackTrace();
}
}
public static boolean isValidApkUrl(String urlStr) {
String extension = getExtension(urlStr);
return "apk".equalsIgnoreCase(extension) || "rpk".equalsIgnoreCase(extension);
}
public static String getExtension(String urlStr) {
int dotIndex = urlStr.lastIndexOf('.');
if (dotIndex!= -1 && dotIndex < urlStr.length() - 1) {
return urlStr.substring(dotIndex + 1);
}
return "";
}
public static String getFileNameFromUrl(String urlStr) {
int slashIndex = urlStr.lastIndexOf('/');
if (slashIndex!= -1 && slashIndex < urlStr.length() - 1) {
return urlStr.substring(slashIndex + 1);
}
return "unknownFile";
}
public static MultipartFile toMultipartFile(File file) throws IOException {
return new MockMultipartFile(file.getName(), file.getName(), null, new FileInputStream(file));
}
public static void uploadApk(MultipartFile multipartFile) {
// 这里是假设的 uploadApk 方法实现,实际中需根据具体情况实现
System.out.println("Uploading apk file with name: " + multipartFile.getOriginalFilename());
}
}
在这个版本中,添加了一个方法getFileNameFromUrl来从 URL 中提取文件名,并在创建临时文件后将其重命名为原始文件名,以保留原来的文件名。同时,指定了一个临时文件夹tempFolder来存放临时文件。请注意,在实际应用中,你可能需要根据实际情况调整临时文件夹的路径,并确保有足够的权限进行文件操作。