Abdullah Tellioglu
Abdullah Tellioglu

Reputation: 1464

Upload file to Spark Java

I am trying to create a folder which contains uploaded files. I have seen some examples that saving files into the absolute folder such as D:/tmp or Home directory. My question is I am trying to put my uploaded files into a folder which is inside the project folder. Upload folder should contains uploaded files

I also tried to get project folder using like this :

    public static String getProjectFolder(){
         return System.getProperty("user.dir")+"/";
    }

Result become something like this, and file not found exception inside the Html file!

http://localhost:1234/Users/USER_NAME/Documents/java/PROJECT_NAME/upload/genres/action.jpg

What is the best way to add folder into my project? Or should I use hardcoded folder for it ?

Upvotes: 0

Views: 929

Answers (1)

SHG
SHG

Reputation: 2616

You need to set the folder that you want to upload files to as the static files folder using staticFiles.externalLocation().

The only folder the client can reach, either for getting content from OR uploading to, is the folder you set using the static files location API staticFiles.externalLocation(). You can see also an example for that here.

When I run my server locally, I define it to be:

staticFiles.externalLocation(System.getProperty("user.dir") + "/src/main/resources");

This is regarding what your question.


You might run into an issue though. Because now you probably have two locations that you want public:

  • The resources folder (with all the JavaScripts, CSSs, etc. Typically /src/main/resources)
  • Upload folder (to let the user upload files)

Having both of these the same location is not a good practice. I managed to resolve that by creating a symbolic link called files inside the public folder.

abcmbp:resources abc$ pwd
/Users/abc/dev/wspace/proj1/src/main/resources

abcmbp:resources abc$ ls -l files
lrwxr-xr-x  1 abc  staff  27 Mar  3 21:20 files -> /Users/abc/appUploadFolder/

Then, in the post handle of the uploading path, I give this folder as the destination, and this way I have a separation between resources and uploaded files.

Upvotes: 1

Related Questions