import com.google.zxing.ReaderException;
import com.google.zxing.Result;
import com.google.zxing.client.j2se.BufferedImageMonochromeBitmapSource;
+import com.google.zxing.client.result.ParsedReaderResult;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import java.util.logging.Logger;
/**
- * @author Sean Owen
+ * {@link HttpServlet} which decodes images containing barcodes. Given a URL, it will
+ * retrieve the image and decode it. It can also process image files uploaded via POST.
+ *
+ * @author Sean Owen (srowen@google.com)
*/
public final class DecodeServlet extends HttpServlet {
}
@Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
+ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String imageURIString = request.getParameter("u");
if (imageURIString == null || imageURIString.length() == 0) {
log.info("Decoding " + imageURI);
InputStream is = getResponse.getEntity().getContent();
try {
- processStream(is, response);
+ processStream(is, request, response);
} finally {
is.close();
}
log.info("Decoding uploaded file");
InputStream is = item.getInputStream();
try {
- processStream(is, response);
+ processStream(is, request, response);
} finally {
is.close();
}
} else {
- throw new ServletException("File is too large: " + item.getSize());
+ response.sendRedirect("badimage.jspx");
}
break;
}
}
- private static void processStream(InputStream is, HttpServletResponse response) throws IOException {
+ private static void processStream(InputStream is, HttpServletRequest request, HttpServletResponse response)
+ throws ServletException, IOException {
BufferedImage image = ImageIO.read(is);
if (image == null) {
response.sendRedirect("badimage.jspx");
return;
}
- response.setContentType("text/plain");
- response.setCharacterEncoding("UTF-8");
- Writer out = new OutputStreamWriter(response.getOutputStream(), "UTF-8");
- try {
- out.write(result.getText());
- } finally {
- out.close();
+ if (request.getParameter("full") == null) {
+ response.setContentType("text/plain");
+ response.setCharacterEncoding("UTF-8");
+ Writer out = new OutputStreamWriter(response.getOutputStream(), "UTF-8");
+ try {
+ out.write(result.getText());
+ } finally {
+ out.close();
+ }
+ } else {
+ request.setAttribute("result", result);
+ ParsedReaderResult parsedReaderResult = ParsedReaderResult.parseReaderResult(result);
+ request.setAttribute("parsedReaderResult", parsedReaderResult);
+ request.getRequestDispatcher("decoderesult.jspx").forward(request, response);
}
}