@Controller
public class UploadController {
@RequestMapping("upload.do")
@ResponseBody
public String upload(@RequestParam("file")MultipartFile file) throws IllegalStateException, IOException {
System.out.println(file.getOriginalFilename());
File dest=new File("d:/2.jpg");
file.transferTo(dest);
return "ok";
}
}
如上面一段代码是集成springmvc 这里我遇到个问题,File dest=new File("d:/2.jpg"); 本身不能在物理路径创建文件,需要使用 file.createNewFile() 才可以创建物理路径真实文件,而file.transferTo(dest); 这个方法的作用是 把上传文件的数据保存到硬盘的另一个文件上面,因此我做了一个实验 我在硬盘创一个d:/2.jpg,不过创建的图片文件没有数据,就只是个空白文件,这时我执行 File dest=new File("d:/2.jpg") file.transferTo(dest); 这两个方法后发现 d:/2.jpg 里面的图片文件有数据,并且能够打开,这个实验我能理解,但是下面的实验我就不明白了,我把d:/2.jpg 这个文件删了,硬盘没有真实的d:/2.jpg文件了,这时执行File dest=new File("d:/2.jpg") file.transferTo(dest); 这两个方法后发现 d:/2.jpg 这个文件在硬盘真实被创建出来了,而且能够打开是个图片,这点我就不理解了 因为 File dest=new File("d:/2.jpg") 这段代码不能真实创建文件, file.transferTo(dest); 这个也没有创建文件的功能,但是执行了dest=new File("d:/2.jpg") file.transferTo(dest); 这两个方法 为什么就能在硬盘真实存在d:/2.jpg 这个文件了呢?麻烦各位高手 告诉我下 非常感谢。
看源码找答案啊,你在这问回答的人还不是得给你看源码
另外其实不要纠结这些
new File(d/2.jpg)是创建一个文件实例对象,然后transferTo需要一个文件对象。这个2.jpg是可以随便命名,你可以写xxx.jpg或者3.png这种,你在去上传2.jpg图片后,你会发现xxx.jpg或者3.png内容就是2.jpg了。
另外如果是new File(“d:”)没有写上传的具体文件名称,后面需要判断该路径是否存在,比如new File(“d:/test”),要去判断test是否存在,不存在要创建文件夹,最后再调用transferTo方法时要给完整的文件实例对象transferTo(new File(“d:/test”),xxx.jpg)。具体的file类构造的创建有3种形式。
如下:
public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的 File实例。
public File(File parent, String child) :从父抽象路径名和子路径名字符串创建新的 File实例。