NIHVIVO-918 Merge 5377 from branch
This commit is contained in:
parent
38130db941
commit
50cc897669
8 changed files with 38 additions and 12 deletions
|
@ -2,6 +2,9 @@
|
||||||
|
|
||||||
package edu.cornell.mannlib.vitro.webapp.filestorage;
|
package edu.cornell.mannlib.vitro.webapp.filestorage;
|
||||||
|
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.net.URLEncoder;
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
|
@ -42,7 +45,8 @@ public class FileServingHelper {
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
* Combine the URI and the filename to produce a relative URL for the file
|
* Combine the URI and the filename to produce a relative URL for the file
|
||||||
* (relative to the context of the webapp).
|
* (relative to the context of the webapp). The filename will be URLEncoded
|
||||||
|
* as needed.
|
||||||
* </p>
|
* </p>
|
||||||
* <p>
|
* <p>
|
||||||
* This should involve stripping the default namespace from the front of the
|
* This should involve stripping the default namespace from the front of the
|
||||||
|
@ -66,6 +70,13 @@ public class FileServingHelper {
|
||||||
return uri;
|
return uri;
|
||||||
}
|
}
|
||||||
String remainder = uri.substring(DEFAULT_NAMESPACE.length());
|
String remainder = uri.substring(DEFAULT_NAMESPACE.length());
|
||||||
|
|
||||||
|
try {
|
||||||
|
filename = URLEncoder.encode(filename, "UTF-8");
|
||||||
|
} catch (UnsupportedEncodingException e) {
|
||||||
|
log.error("No UTF-8 encoding?", e); // Can't happen.
|
||||||
|
}
|
||||||
|
|
||||||
String separator = remainder.endsWith("/") ? "" : "/";
|
String separator = remainder.endsWith("/") ? "" : "/";
|
||||||
return FILE_PATH + remainder + separator + filename;
|
return FILE_PATH + remainder + separator + filename;
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,8 @@ import static javax.servlet.http.HttpServletResponse.SC_OK;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.net.URLDecoder;
|
||||||
|
|
||||||
import javax.servlet.ServletException;
|
import javax.servlet.ServletException;
|
||||||
import javax.servlet.ServletOutputStream;
|
import javax.servlet.ServletOutputStream;
|
||||||
|
@ -95,7 +97,8 @@ public class FileServingServlet extends VitroHttpServlet {
|
||||||
response.sendError(SC_NOT_FOUND, ("File not found: " + path));
|
response.sendError(SC_NOT_FOUND, ("File not found: " + path));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!actualFilename.equals(requestedFilename)) {
|
if (!actualFilename.equals(requestedFilename)
|
||||||
|
&& !actualFilename.equals(decode(requestedFilename))) {
|
||||||
log.warn("The requested filename does not match the "
|
log.warn("The requested filename does not match the "
|
||||||
+ "actual filename; request: '" + path + "', actual: '"
|
+ "actual filename; request: '" + path + "', actual: '"
|
||||||
+ actualFilename + "'");
|
+ actualFilename + "'");
|
||||||
|
@ -163,6 +166,18 @@ public class FileServingServlet extends VitroHttpServlet {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The filename may have been encoded for URL transfer.
|
||||||
|
*/
|
||||||
|
private String decode(String filename) {
|
||||||
|
try {
|
||||||
|
return URLDecoder.decode(filename, "UTF-8");
|
||||||
|
} catch (UnsupportedEncodingException e) {
|
||||||
|
log.error("How did this happen?", e);
|
||||||
|
return filename;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A POST request is treated the same as a GET request.
|
* A POST request is treated the same as a GET request.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -223,8 +223,8 @@ if (VitroRequestPrep.isSelfEditing(request) || LoginFormBean.loggedIn(request, L
|
||||||
<div class="datatypeProperties">
|
<div class="datatypeProperties">
|
||||||
<div class="datatypePropertyValue">
|
<div class="datatypePropertyValue">
|
||||||
<div class="statementWrap thumbnail">
|
<div class="statementWrap thumbnail">
|
||||||
<a class="image" href="<c:url value='${entity.imageUrl}'/>">
|
<a class="image" href="${pageContext.request.contextPath}${entity.imageUrl}">
|
||||||
<img src="<c:url value='${entity.thumbUrl}'/>"
|
<img src="${pageContext.request.contextPath}${entity.thumbUrl}"
|
||||||
title="click to view larger image"
|
title="click to view larger image"
|
||||||
alt="" width="115"/>
|
alt="" width="115"/>
|
||||||
</a>
|
</a>
|
||||||
|
|
|
@ -49,7 +49,7 @@
|
||||||
<c:param name="uri" value="${ent.URI}"/>
|
<c:param name="uri" value="${ent.URI}"/>
|
||||||
</c:url>
|
</c:url>
|
||||||
<a class="image" href="<c:out value="${entityHref}"/>" >
|
<a class="image" href="<c:out value="${entityHref}"/>" >
|
||||||
<img width="${IMG_WIDTH}" src="<c:url value='${ent.thumbUrl}'/>" title="${ent.name}" alt="${ent.name}" />
|
<img width="${IMG_WIDTH}" src="${pageContext.request.contextPath}${ent.thumbUrl}" title="${ent.name}" alt="${ent.name}" />
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
</c:if>
|
</c:if>
|
||||||
|
|
|
@ -80,7 +80,7 @@
|
||||||
<c:param name="home" value="${sessionScope.currentPortalId}"/>
|
<c:param name="home" value="${sessionScope.currentPortalId}"/>
|
||||||
<c:param name="uri" value="${ent.URI}"/>
|
<c:param name="uri" value="${ent.URI}"/>
|
||||||
</c:url>
|
</c:url>
|
||||||
<div class="tab-image"><a class="image" href="<c:out value="${imageHref}"/>"><img width="${IMG_WIDTH}" src="<c:url value='${ent.thumbUrl}'/>" title="${ent.name}" alt="" /></a></div>
|
<div class="tab-image"><a class="image" href="<c:out value="${imageHref}"/>"><img width="${IMG_WIDTH}" src="${pageContext.request.contextPath}${ent.thumbUrl}" title="${ent.name}" alt="" /></a></div>
|
||||||
<c:if test="${not empty ent.blurb}"><div class='blurb'>${ent.blurb}</div></c:if>
|
<c:if test="${not empty ent.blurb}"><div class='blurb'>${ent.blurb}</div></c:if>
|
||||||
</c:when>
|
</c:when>
|
||||||
<c:otherwise>
|
<c:otherwise>
|
||||||
|
|
|
@ -41,8 +41,8 @@
|
||||||
</c:forEach>
|
</c:forEach>
|
||||||
<c:if test="${!empty entity.thumbUrl}">
|
<c:if test="${!empty entity.thumbUrl}">
|
||||||
<div class="thumbnail">
|
<div class="thumbnail">
|
||||||
<c:if test="${!empty entity.imageUrl}"><a target="_new" href="<c:url value='${entity.imageUrl}'/>"></c:if>
|
<c:if test="${!empty entity.imageUrl}"><a target="_new" href="${pageContext.request.contextPath}${entity.imageUrl}"></c:if>
|
||||||
<img src="<c:url value='${entity.thumbUrl}'/>" title="click to view larger image in new window" width="150">
|
<img src="${pageContext.request.contextPath}${entity.thumbUrl}" title="click to view larger image in new window" width="150">
|
||||||
<c:if test="${!empty entity.imageUrl}"></a></c:if>
|
<c:if test="${!empty entity.imageUrl}"></a></c:if>
|
||||||
</div>
|
</div>
|
||||||
</c:if>
|
</c:if>
|
||||||
|
|
|
@ -22,9 +22,9 @@
|
||||||
<div id="dashboard"<c:if test="${showCuratorEdits}"> class="loggedIn"</c:if>>
|
<div id="dashboard"<c:if test="${showCuratorEdits}"> class="loggedIn"</c:if>>
|
||||||
<c:if test="${!empty entity.thumbUrl}">
|
<c:if test="${!empty entity.thumbUrl}">
|
||||||
<c:if test="${!empty entity.imageUrl}">
|
<c:if test="${!empty entity.imageUrl}">
|
||||||
<a class="image" href="<c:url value='${entity.imageUrl}'/>">
|
<a class="image" href="${pageContext.request.contextPath}${entity.imageUrl}">
|
||||||
</c:if>
|
</c:if>
|
||||||
<img class="headshot" src="<c:url value='${entity.thumbUrl}'/>" title="click to view larger image in new window" alt="" width="150"/>
|
<img class="headshot" src="${pageContext.request.contextPath}${entity.thumbUrl}" title="click to view larger image in new window" alt="" width="150"/>
|
||||||
<c:if test="${!empty entity.imageUrl}"></a></c:if>
|
<c:if test="${!empty entity.imageUrl}"></a></c:if>
|
||||||
</c:if>
|
</c:if>
|
||||||
|
|
||||||
|
|
|
@ -22,9 +22,9 @@
|
||||||
<div id="dashboard"<c:if test="${showCuratorEdits}"> class="loggedIn"</c:if>>
|
<div id="dashboard"<c:if test="${showCuratorEdits}"> class="loggedIn"</c:if>>
|
||||||
<c:if test="${!empty entity.thumbUrl}">
|
<c:if test="${!empty entity.thumbUrl}">
|
||||||
<c:if test="${!empty entity.imageUrl}">
|
<c:if test="${!empty entity.imageUrl}">
|
||||||
<a class="image" href="<c:url value='${entity.imageUrl}'/>">
|
<a class="image" href="${pageContext.request.contextPath}${entity.imageUrl}">
|
||||||
</c:if>
|
</c:if>
|
||||||
<img class="headshot" src="<c:url value='${entity.thumbUrl}'/>" title="click to view larger image in new window" alt="" width="150"/>
|
<img class="headshot" src="${pageContext.request.contextPath}${entity.thumbUrl}" title="click to view larger image in new window" alt="" width="150"/>
|
||||||
<c:if test="${!empty entity.imageUrl}"></a></c:if>
|
<c:if test="${!empty entity.imageUrl}"></a></c:if>
|
||||||
</c:if>
|
</c:if>
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue