2016-04-21 208 views
0

我在客戶端使用Spring Boot和AngularJS開發Rest API,我使用下面的RestController將文件上傳到/ resources/static/upload,並在客戶端使用它們側Spring:引用資源/靜態文件夾

@RestController 
@CrossOrigin("*") 
public class FilmController { 
    @Autowired 
    private FilmRepository filmRepository; 

    @RequestMapping(value = "/films", method = RequestMethod.POST) 
    public void saveFilm(@RequestParam("file") MultipartFile file) throws Exception { 

     File convFile = new File("src/main/resources/static/upload/"+file.getOriginalFilename()); 

     convFile.createNewFile(); 
     FileOutputStream fos = new FileOutputStream(convFile); 
     Blob blob = new SerialBlob(file.getBytes()); 

     fos.write(file.getBytes()); 
     fos.close(); 
     System.out.println(convFile.getName()); 


     filmRepository.save(new Film(convFile.getName(), blob)); 
    } 

    @RequestMapping(value = "/films", method = RequestMethod.GET) 
    public List<Film> getAllFilms() { 
     return filmRepository.findAll(); 
    } 

} 

這裏是我訪問上傳的圖片「image.jpg的」

<img src="http://localhost:8080/upload/image.jpg" /> 

但是,當我跑MVN包,啓動我的應用程序JAR文件,我無法訪問上傳圖片在客戶端,我沒有找到404。

有人可以解釋一下Spring存儲和引用靜態資源的方式,以及如何解決這個問題。

+2

你不能......你不能上傳到類路徑中的路徑,它將有效地在jar中。 –

+0

那麼我可以在哪裏上傳我的文件,並仍然可以在客戶端訪問它們? – jemlifathi

+1

在文件系統或合適的數據存儲上使用路徑。 –

回答

2

我正在使用目錄的絕對路徑,並且在兩種情況下都能正常工作:它與mvn spring-boot:run一起運行時以及它運行的時間爲java -jar app.jar

例如,你可以嘗試上傳保存到/opt/upload(確保它的存在和用戶有權寫進去):

File convFile = new File("/opt/upload/"+file.getOriginalFilename()); 

你也應該配置Spring從該目錄服務上傳: http://www.baeldung.com/spring-mvc-static-resources

+0

如何從客戶端訪問/ opt /上傳文件(angularjs)? – jemlifathi

+0

「訪問」是什麼意思?圖像將像以前一樣可用,通過像「http:// localhost:8080/upload/image.jpg」這樣的URL登錄。 –

+0

它工作正常!非常感謝你 – jemlifathi

0

首先,你不能在存儲:有關配置資源處理

@Configuration 
@EnableWebMvc 
public class MvcConfig extends WebMvcConfigurerAdapter { 

    @Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) { 
     registry 
      .addResourceHandler("/upload/**") 
      .addResourceLocations("file:/opt/upload/"); 
    } 

} 

更多信息文件夾結構,你在你的IDE看到,是不是你的代碼怎麼會在部署的數據包

File convFile = new File("src/main/resources/static/upload/"+file.getOriginalFilename()); 

店使用相對路徑

File convFile = new File("/static/upload/"+file.getOriginalFilename()); 

,並添加資源位置映射在春天的配置爲你的形象上傳文件夾。

<mvc:resources mapping="/upload/**" location="/static/upload/" />