Java版复制文件
背景
无人机拍摄的图片经过解压后需要存储到nginx转发的图片文件夹下,思路是把本地文件转为MultipartFile类型,然后再存储到目标路径上。
代码
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
public class FileUtil {
/**
* 示例
*/
public static void main(String[] args) {
//复制文件
upload(getMulFileByPath("/Users/raines/Desktop/my/test_upload/test_upload/100.jpg"),"/Users/raines/Desktop/my/test_upload/test_upload/demo.jpg");
}
/**
* 本地文件转为MultipartFile类型
* @param picPath 文件路径
*/
public static MultipartFile getMulFileByPath(String picPath) {
FileItem fileItem = createFileItem(picPath);
MultipartFile mfile = new CommonsMultipartFile(fileItem);
return mfile;
}
private static FileItem createFileItem(String filePath)
{
FileItemFactory factory = new DiskFileItemFactory(16, null);
String textFieldName = "textField";
int num = filePath.lastIndexOf(".");
String extFile = filePath.substring(num);
FileItem item = factory.createItem(textFieldName, "text/plain", true,
"MyFileName" + extFile);
File newfile = new File(filePath);
long fileSize = newfile.length();
int bytesRead = 0;
byte[] buffer =new byte[(int) fileSize];
try
{
FileInputStream fis = new FileInputStream(newfile);
OutputStream os = item.getOutputStream();
while ((bytesRead = fis.read(buffer, 0, buffer.length))!= -1)
{
os.write(buffer, 0, bytesRead);
}
os.close();
fis.close();
}
catch (IOException e)
{
e.printStackTrace();
}
return item;
}
/**
* 保存文件
* @param file 文件
* @param pathName 文件路径
* @return
*/
public static boolean upload(MultipartFile file, String pathName) {
File tempFile = new File(pathName);
try {
//判断文件父目录是否存在
if (!tempFile.getParentFile().exists()) {
tempFile.getParentFile().mkdirs();//创建父级文件路径
tempFile.createNewFile();//创建文件
}
//保存文件
file.transferTo(tempFile);
return true;
} catch (IllegalStateException e) {
e.printStackTrace();
return false;
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
}
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!