0

The problem I am having is that I can only upload images from the projects directory (/home/usr/workspace/project/~from here~).

For obvious reasons this won't work when I go to publish this feature. I am not sure where I should configure this differently. Help me stack overflow you're my only hope.

@RequestMapping("/saveImage")
public String getPreparedUploadUrl(@RequestParam File fileName, 
  HttpSession session) throws IOException, InterruptedException {
    java.util.Date expiration = new java.util.Date();
    long msec = expiration.getTime();
    msec += 1000 * 60 * 60; // Add 1 hour.
    expiration.setTime(msec);
    ObjectMetadata md = new ObjectMetadata();
    md.setContentType("image/jpg");
    md.setContentLength(fileName.length());
    md.setHeader(fileName.getName(), fileName.getAbsolutePath());
    File file = new File(fileName.getAbsolutePath());
    FileInputStream fis = new FileInputStream(file);
    byte[] content_bytes = IOUtils.toByteArray(fis);
    String md5 = new 
 String(Base64.encodeBase64(DigestUtils.md5(content_bytes)));
    md.setContentMD5(md5);


    GeneratePresignedUrlRequest generatePresignedUrlRequest = 
            new GeneratePresignedUrlRequest("wandering-wonderland-
images", fileName.getName());

    generatePresignedUrlRequest.setMethod(HttpMethod.PUT); 
    generatePresignedUrlRequest.setExpiration(expiration);


    URL s = 
 s3client.generatePresignedUrl(generatePresignedUrlRequest);

    try {

        UploadObject(s, fileName);

    } catch (IOException e) {
        e.printStackTrace();
    }
    session.setAttribute("saved", fileName + " has been saved!");
    return "redirect:/saved3";
}

// working, don't f@$# with it!
public static void UploadObject(URL url, File file) throws 
IOException, InterruptedException {

    HttpURLConnection connection=(HttpURLConnection) 
  url.openConnection();
    InputStream inputStream = new 
   FileInputStream(file.getAbsolutePath());
    connection.setDoOutput(true);
    connection.setRequestMethod("PUT");
    OutputStream out =
            connection.getOutputStream();

    byte[] buf = new byte[1024];
    int count;
    int total = 0;
    long fileSize = file.length();

    while ((count =inputStream.read(buf)) != -1)
    {
        if (Thread.interrupted())
        {
            throw new InterruptedException();
        }
        out.write(buf, 0, count);
        total += count;
        int pctComplete = new Double(new Double(total) / new 
Double(fileSize) * 100).intValue();

        System.out.print("\r");
        System.out.print(String.format("PCT Complete: %d", 
 pctComplete));
    }
    System.out.println();
    out.close();
    inputStream.close();

    int responseCode = connection.getResponseCode();
    System.out.println("Service returned response code " + 
      responseCode);
}
Manfred Radlwimmer
  • 13,257
  • 13
  • 53
  • 62
  • Welcome to StackOverflow! Rather than pasting your whole program, can you cut it down to the relevant part that is giving you a problem? For tips on posting a good question, see [How do I ask a good question?](http://stackoverflow.com/help/how-to-ask). You might also consider using the [Java TransferManager](http://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/examples-s3-transfermanager.html) to simplify your code. – John Rotenstein Apr 29 '17 at 22:22
  • You do understand how paths work, and the concept of every process having a concept of it's current working directory, and that unqualified (non-absolute) paths are interpreted as relative to the cwd... right? – Michael - sqlbot Apr 30 '17 at 01:24
  • Well if non absolute paths are relative to cwd. Wouldn't calling getAbsolutePath get around that? – Jason Bierbrauer Apr 30 '17 at 23:00

0 Answers0