使用Spring MultipartFile和Google App Engine上传文件

3
我一直在尝试使用MVC和Google App Engine上传文件。每次都会出现以下错误:

Expected MultipartHttpServletRequest:是否配置了MultipartResolver?

之后我查看了两个教程来上传文件。每次流程都到达控制器,但不能够访问在jsp文件中使用Spring MVC和Google App Engine上传的MultipartFile文件。这两个参考文献分别是:

http://alasdoo.com/2010/10/how-to-upload-a-file-with-spring-mvc-3-and-google-app-engine/

https://code.google.com/p/gmultipart/

所以有人可以指导我解决问题吗?


你愿意上传到文件系统或Blobstore吗?因为你无法将文件上传到文件系统。 - Ankur Jain
1
不需要添加任何MultipartFileResolver。只需编写一个方法,该方法将返回上传URL,在该特定方法上执行enctype/multipart-formdata post,您将获得已上传到Blobstore的文件。 - Ankur Jain
我尝试过,但没有用。最后回到jsp-servlet机制来存储它。但我想直接读取并存储到数据存储器中。 - Sreekanth
请查看下面的代码,这是用于Spring GAE文件上传的。 - Ankur Jain
1个回答

5
以下方法将返回一个回调URL,您需要在该URL上发布您的文件。
上传URL方法
@RequestMapping(value = "/uploadurl", method = RequestMethod.GET)
public String getImageUploadUrl() {
    modelMap.addAttribute('uploadUrl',blobstoreService.createUploadUrl("/imageupload));
    return "upload";
}

以下是JSP代码片段,您将在其中嵌入您的代码。我将使用JSTL将URL放在表单标签中。 JSP页面
<form action="${uploadUrl}" method="POST" enctype="multipart/form-data">
    <input type="file" name="myFile" multiple="multiple" />
</form>

上传处理程序方法

@ResponseBody
@RequestMapping(value = "/imageupload", method = RequestMethod.POST)
public void getUploadedImagesUrls(HttpServletRequest request){
    Map<String, List<BlobKey>> blobs = blobstoreService.getUploads(request);
    List<BlobKey> blobKeys = blobs.get("myFile[]");
    if (blobKeys == null) {
        return null;
    } else {
        for(BlobKey blobKey : blobKeys){
            // ImagesService services = ImagesServiceFactory.getImagesService();
            // ServingUrlOptions serve = ServingUrlOptions.Builder.withBlobKey(blobKey);
            // String imageUrl = services.getServingUrl(serve);
            BlobInfoFactory blobInfoFactory = new BlobInfoFactory();
            BlobInfo info = blobInfoFactory.loadBlobInfo(blobKey);
            System.out.println("Image URL : "+imageUrl);
            System.out.println("Image FileName : "+info.getFilename());
        }
    }
}

1
谢谢你的帖子,Jain。但我不打算上传图片。它可能是任何大小的文件。 - Sreekanth
2
没问题,你可以跳过图像服务部分,无论如何你都会得到图像的blobkey,你可以使用它来下载/删除并获取有关blob的信息。 - Ankur Jain
1
检查是否已上传文件,请在 localhost:8888/_ah_admin 下进行确认。 - Ankur Jain
1
据我所知,目前没有任何方法可以读取文件的内容,因为Appengine并不关心您实际上传到其中的文件类型。虽然我认为您可以尝试使用Apache文件上传库上传文件,在此过程中控制器将整个文件上传到Blobstore,您可以尝试在那里读取它的内容。 - Ankur Jain
谢谢。我们能用ajax调用它吗?我的意思是我只想通过使用ajax调用方法**/imageupload**。使用ajax时,该方法没有被调用。 - Sreekanth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接