Partial fix for AWC-999: Content upload guesses character encoding and offers the user the chance to change it.

TODO: Fix the "Modify Content Properties" to include the encoding as a changeable option.

Modified other entry points of content into the system.  All calls to ContentWriter.setEncoding("UTF-8") need some serious examination.
It is no longer necessary to assume anything about the encoding.  The worst case scenario is that we guess the encoding from the stream
without giving the user the chance to change it.  This works for most non-interactive scenarios like CIFS, WebDAV and FTP, now.


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@6113 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Derek Hulley
2007-06-26 21:48:19 +00:00
parent 0dd05fe40f
commit e29e24e761
16 changed files with 528 additions and 17 deletions

View File

@@ -24,7 +24,10 @@
*/
package org.alfresco.web.bean.content;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.Serializable;
import java.text.MessageFormat;
import java.util.ArrayList;
@@ -68,6 +71,7 @@ public class AddContentDialog extends BaseContentWizard
// Try and extract metadata from the file
ContentReader cr = new FileContentReader(this.file);
cr.setMimetype(this.mimeType);
cr.setEncoding(this.encoding);
// create properties for content type
Map<QName, Serializable> contentProps = new HashMap<QName, Serializable>(5, 1.0f);
@@ -148,9 +152,29 @@ public class AddContentDialog extends BaseContentWizard
// NOTE: This is a far from ideal solution but will do until we have
// a pure JSF upload solution working. This method is only called
// after a file is uploaded, so we can calculate the mime type and
// determine whether to enable inline editing in here.
this.mimeType = Repository.getMimeTypeForFileName(
FacesContext.getCurrentInstance(), this.fileName);
// determine whether to enable inline editing in here.
FacesContext fc = FacesContext.getCurrentInstance();
this.mimeType = Repository.getMimeTypeForFileName(fc, this.fileName);
this.encoding = "UTF-8";
InputStream is = null;
try
{
if (this.file != null)
{
is = new BufferedInputStream(new FileInputStream(this.file));
this.encoding = Repository.guessEncoding(fc, is, this.mimeType);
}
}
catch (Throwable e)
{
// Not terminal
logger.error("Failed to get encoding from file: " + this.fileName, e);
}
finally
{
try { is.close(); } catch (Throwable e) {} // Includes NPE
}
this.inlineEdit = (this.mimeType.equals(MimetypeMap.MIMETYPE_HTML));
// get the file upload message