spring mvc 4、spring bootとthymeleafをテンプレートエンジンとして使用して複数のファイルをアップロードしようとしていますが、アップロードされたファイルにアクセスできません。コンテンツタイプapplication/octet-streamを持つ1つのマルチパートファイルとして扱われます。ここに私のフロントエンドのコードは次のとおりです。html5複数のファイルをspring mvc 4とspring bootでアップロードする
<form name="offer-form" th:action="@{/submit-property}" method="POST" enctype="multipart/form-data">
<!-- .. other inputs .. -->
<div class="col-xs-12 margin-top-60">
<input id="file-upload"name="files[]" type="file" multiple="multiple"/>
</div>
<div class="col-xs-12">
<div class="center-button-cont margin-top-60">
<button type="submit" class="button-primary button-shadow">
<span>submit property</span>
<div class="button-triangle"></div>
<div class="button-triangle2"></div>
<div class="button-icon"><i class="fa fa-lg fa-home"></i></div>
</button>
</div>
</div>
</form>
とコントローラコード:
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.tomcat.util.http.fileupload.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import com.aq.domain.Property;
import com.aq.service.AddPropertyFormDataInitializerService;
@Controller
public class PorpertySubmissionController
{
public static final Resource PICTURES_DIR = new FileSystemResource("./uploadedPictures");
//some unrelated code
@RequestMapping(value="/submit-property", method=RequestMethod.GET)
public String getSubmitPropertyForm(Model model)
{
model.addAttribute("property", new Property());
return "submit-property";
}
@RequestMapping(value="/submit-property", method=RequestMethod.POST)
public String submitProperty
(
@ModelAttribute(value="property") Property property,
@RequestParam("files[]") MultipartFile[] uploadedImages
)
{
//some unrelated code
if(uploadedImages != null && uploadedImages.length > 0)
{
System.out.println("uploadedImages length: " + uploadedImages.length);
for(MultipartFile imageFile : uploadedImages)
{
try
{
copyFileToPictures(imageFile);
System.out.println("copied File: " + imageFile.getOriginalFilename() + " successfully.");
}
catch (IOException e)
{
System.err.println(e.getMessage());
e.printStackTrace();
}
}
}
else
{
System.out.println("no images were uploaded");
}
return "redirect:/submit-property";
}
private Resource copyFileToPictures(MultipartFile file) throws IOException {
System.out.println("File Original Name: " + file.getOriginalFilename());
System.out.println("File Name: " + file.getName());
System.out.println("File size: " + file.getSize());
System.out.println("File Content type: " + file.getContentType());
String fileExtension = getFileExtension(file.getOriginalFilename());
File tempFile = File.createTempFile("pic", fileExtension, PICTURES_DIR.getFile());
try (InputStream in = file.getInputStream();
OutputStream out = new FileOutputStream(tempFile)) {
IOUtils.copy(in, out);
}
return new FileSystemResource(tempFile);
}
private static String getFileExtension(String name) {
return name.substring(name.lastIndexOf("."));
}
}
SYSOUTの出力:
uploadedImages長:1(私は複数のファイルをアップロードしていても)
ファイル名(getOriginalFileNameを使用):
ファイル名(getNam E):ファイル[]
ファイルサイズ:0
ファイルコンテンツの種類:アプリケーション/ octet-streamの
と空の元のファイル名で呼ばれているsubsctring例外。
私は誰かが直面している念のために私のPOMおよび設定CommonsMultipartResolver Beanにコモンズのファイルのアップロードを追加しようとしましたが、それは常に(それがnullまたは長さ= 0だことを意味する)は、アップロードした画像がないことを表示します