将MultipartFile转换为java.io.File而不复制到本地计算机
我有一个Java Spring MVC Web应用程序。从客户端,通过AngularJS,我正在上传文件并将其作为Web服务发布到Controller。
在我的控制器中,我将它作为 并且可以将其复制到本地计算机。
但是我想将文件上传到 存储桶。所以我必须将其转换为
。现在,我正在将其复制到本地计算机,然后使用
上载到S3 。
这是我在控制器中转换的方式
MultipartHttpServletRequest mRequest=(MultipartHttpServletRequest)request;Iterator<String> itr=mRequest.getFileNames();
while(itr.hasNext()){
MultipartFile mFile=mRequest.getFile(itr.next());
String fileName=mFile.getOriginalFilename();
fileLoc="/home/mydocs/my-uploads/"+date+"_"+fileName; //date is String form of current date.
然后我正在使用SpringFramework的FIleCopyUtils
File newFile = new File(fileLoc); // if the directory does not exist, create it
if (!newFile.getParentFile().exists()) {
newFile.getParentFile().mkdirs();
}
FileCopyUtils.copy(mFile.getBytes(), newFile);
因此它将在本地计算机上创建一个新文件。我在S3中赞扬的那个文件
S3Object fileObject = new S3Object(newFile);s3Service.putObject("myBucket", fileObject);
它在我的本地系统中创建文件。我不想创造。
回答:
默认情况下,MultipartFile在用户上载时已作为文件保存在服务器上。从那时开始-
您可以使用此文件执行任何操作。有一种方法可以将临时文件移动到所需的任何目标。
http://docs.spring.io/spring/docs/3.0.x/api/org/springframework/web/multipart/MultipartFile.html#transferTo(java.io.File)
但是MultipartFile只是API,您可以实现任何其他
http://docs.spring.io/spring/docs/3.0.x/api/org/springframework/web/multipart/MultipartResolver.html
此API接受输入流,您可以使用它执行任何操作。默认实现(通常是commons-multipart)将其另存为temp dir作为文件。
但是还有其他问题在这里-如果S3 API接受文件作为参数-您将无法执行任何操作-您需要一个真实的文件。如果您想完全避免创建文件,请创建自己的S3 API。
以上是 将MultipartFile转换为java.io.File而不复制到本地计算机 的全部内容, 来源链接: utcz.com/qa/434512.html