Create
cancel
Showing results for 
Search instead for 
Did you mean: 
Sign up Log in

Next challenges

Recent achievements

  • Global
  • Personal

Recognition

  • Give kudos
  • Received
  • Given

Leaderboard

  • Global

Trophy case

Kudos (beta program)

Kudos logo

You've been invited into the Kudos (beta program) private group. Chat with others in the program, or give feedback to Atlassian.

View group

It's not the same without you

Join the community to find out what other Atlassian users are discussing, debating and creating.

Atlassian Community Hero Image Collage

Can't upload attachment with right size with Java Plugin

Hello,
My idea:
I try to send a zip to a java endpoint, where the zip is extracted and i read  a json inside the zip to create a confluence page and add the zip as attachment. 
My code works till the attachment getting uploaded. I get the Error my inputstream is 0. How can i attach the complete zip? With FileUploadManager i can upload a File, but it is way to small. Where is the error in my code?

@Path("/software")
public class ConnectRest {

@ComponentImport private UserAccessor userAccessor;
@ComponentImport private PageManager pageManager;
@ComponentImport private SpaceManager spaceManager;
@ComponentImport private AttachmentManager attachmentManager;
@ComponentImport private FileUploadManager fileUploadManager;

public ConnectRest(UserAccessor userAccessor, PageManager pageManager, SpaceManager spaceManager, AttachmentManager attachmentManager, FileUploadManager fileUploadManager) {
this.userAccessor = userAccessor;
this.spaceManager = spaceManager;
this.pageManager = pageManager;
this.attachmentManager = attachmentManager;
this.fileUploadManager = fileUploadManager;
}

@POST
@Produces({MediaType.APPLICATION_JSON})
@Consumes({MediaType.MULTIPART_FORM_DATA})
@Path("/postPackage")
public Response postPackage(
@Context SecurityContext sc,
@MultipartFormParam ("pageId") FilePart pageIdStr,
@MultipartFormParam ("file") FilePart file)
{
JSONObject response = new JSONObject();
try
{
ConfluenceUser user = userAccessor.getUserByName(sc.getUserPrincipal().getName());
if(userAccessor.getGroupNames(user).contains("confluence-administrators"))
{
if(null != pageIdStr && null != file) {
int pageId = Integer.parseInt(pageIdStr.getValue());
if(file.getContentType().equals("application/octet-stream") && file.getName().endsWith(".package"))
{
InputStream inStream = file.getInputStream();
System.out.println(inStream.available() + "!!!!!!!!!!");
BufferedReader bin = new BufferedReader(new InputStreamReader(inStream));




Helper he = new Helper();
InputStream jsonInStream = he.getJSONofZip(inStream); //get Json in ZIP
if(null != jsonInStream)
{
Scanner s = new Scanner(jsonInStream).useDelimiter("\\A");
String result = s.hasNext() ? s.next() : "";
JSONObject json = new JSONObject(result);
String author = json.getString("author");
String version = json.getString("version");
String title = json.getString("title");
String description = json.getString("description");
String packagename = file.getName();
String template = "TemplatestringTooLong";
template = template.replaceAll(":author:", author);
template = template.replaceAll(":description:", description);
template = template.replaceAll(":version:", version);
template = template.replaceAll(":packagename:", packagename);
Page targetPage = new Page();
Space space = spaceManager.getSpace("PACKAGES");
Page parentPage = space.getHomePage();
targetPage.setTitle(title);
targetPage.setSpace(space);
space.getHomePage().addChild(targetPage);
targetPage.setParentPage(space.getHomePage());
targetPage.setCreatorName(user.getName());
targetPage.setBodyContent(new BodyContent(parentPage.getEntity(), template, parentPage.getDefaultBodyType()));
pageManager.saveContentEntity((ContentEntityObject)targetPage, (SaveContext)null);

// Try 1 to Upload File
Page page = pageManager.getPage("PACKAGES", title);
byte[] byteA = IOUtils.toByteArray(inStream);
Attachment attachment = new Attachment(file.getName() , "application/zip", byteA.length, "", false);
attachment.setCreator(user);
attachment.setCreationDate(new Date());
attachment.setLastModificationDate(new Date());
attachment.setContainer((ContentEntityObject) page);
System.out.println(inStream.available() + "!!!!!!!!!!!!!!!!!!!");
attachmentManager.setAttachmentData(attachment, inStream);
attachmentManager.saveAttachment(attachment, null, inStream);
pageManager.saveContentEntity((ContentEntityObject)page, (SaveContext)null);


//Try 2 to Upload File
Page page = pageManager.getPage("PACKAGES", title);
byte[] byteA = IOUtils.toByteArray(bin);
AttachmentResource resource = new InputStreamAttachmentResource(new ByteArrayInputStream(byteA), packagename, "application/zip", byteA.length, "");
fileUploadManager.storeResource(resource, page);

}else {
return Response.status(422).entity(response.put("message", "No package.json in package file.").toString()).build();
}
}else{
return Response.status(422).entity(response.put("message", "Unrecognized file.").toString()).build();
}
}else {
return Response.status(422).entity(response.put("message", "It's necessary to post package file and pageId.").toString()).build();
}
}else{
return Response.status(401).entity(response.put("message", "You do not have the appropriate permissions.").toString()).build();
}}

catch (IOException ioe)
{return Response.status(422).entity(response.put("message", "Unrecognized file.").toString()).build();}
catch (NumberFormatException nfe)
{return Response.status(422).entity(response.put("message", "Unrecognized pageId.").toString()).build();}
catch (NullPointerException npe)
{return Response.status(422).entity(response.put("message", "It's necessary to post package file and pageId.").toString()).build();}}}



 

1 answer

1 accepted

0 votes
Answer accepted

So I found the problem. You can't upload a ByteArrayInputStream with the same InputStream i already read with my Helper class.
New InputStream and the filesize was right.

Suggest an answer

Log in or Sign up to answer
TAGS
Community showcase
Posted in Confluence

What do you think is the most *delightful* Confluence feature? Comment for a prize!

- Create your own custom emoji 🔥 - "Shake for Feedback" on mobile 📱 - An endless supply of GIFs via GIPHY 🤩 Is there anything quite as nice as a pleasant surprise? Comment below with what...

494 views 24 9
Join discussion

Community Events

Connect with like-minded Atlassian users at free events near you!

Find an event

Connect with like-minded Atlassian users at free events near you!

Unfortunately there are no Community Events near you at the moment.

Host an event

You're one step closer to meeting fellow Atlassian users at your local event. Learn more about Community Events

Events near you