package com.wooki.services;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import org.apache.tapestry5.internal.InternalConstants;
import org.apache.tapestry5.internal.TapestryInternalUtils;
import org.apache.tapestry5.internal.services.RequestConstants;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.services.Request;
import org.apache.tapestry5.services.Response;
import org.apache.tapestry5.upload.services.UploadedFile;
import com.spreadthesource.tapestry.installer.services.ApplicationSettings;
import com.wooki.WookiRequestConstants;
import com.wooki.installer.services.GlobalSettingsTask;
public class UploadMediaServiceImpl implements UploadMediaService
{
private final Request request;
private final Response response;
private final File uploadDir;
private String pathPrefix;
public UploadMediaServiceImpl(Request request, Response response,
@Inject ApplicationSettings settings)
{
super();
this.request = request;
this.response = response;
this.uploadDir = new File(settings.get(GlobalSettingsTask.UPLOAD_DIR));
this.pathPrefix = RequestConstants.ASSET_PATH_PREFIX
+ WookiRequestConstants.UPLOADED_FOLDER;
}
public void streamMedia(String name) throws IOException
{
// Read media file
File media = new File(uploadDir, name);
FileInputStream fileStream = new FileInputStream(media);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
TapestryInternalUtils.copy(fileStream, stream);
long lastModified = System.currentTimeMillis();
response.setDateHeader("Last-Modified", lastModified);
response.setDateHeader("Expires", lastModified + InternalConstants.TEN_YEARS);
response.setContentLength(stream.size());
OutputStream output = response.getOutputStream("application/octet-stream");
stream.writeTo(output);
output.close();
}
public String uploadMedia(UploadedFile file) throws IOException
{
String filename = file.getFileName();
File uploaded = File.createTempFile("upload-", filename
.substring(filename.lastIndexOf(".")), this.uploadDir);
file.write(uploaded);
return this.request.getContextPath() + this.pathPrefix + uploaded.getName();
}
}