2014-01-10 7 views
0

Я использую summernote и хочу, чтобы загрузка сервера была асинхронно. Я планирую, чтобы преобразовать изображение в base64 и отправить в сервлет через AJAX там я сэкономлю сжать файл и вернуть URL файла изображения для редактирования СРКА, как показано ниже:base64 to image file

var edit = function() { 
    $('.click2edit').summernote({ 
     focus: true, 
     onImageUpload: function(files, editor, welEditable) { 
      sendFile(files[0],editor,welEditable); 
     } 
     }); 
}; 
function sendFile(file,editor,welEditable) { 

    alert(file.size); 
    var reader = new FileReader(); 
    var imgfile = reader.readAsBinaryString(file); 
    alert(file); 
    $.ajax({ 
      method:"POST", 
      url: 'imageupload', 
      data: {imageFile:imgfile}, 
      success:function(response) 
      { 
       alert("file uploaded successfully"); 
       return response; 
       }, 
      error: function(response,status,err) 
      { 
       alert("upload failed"); 
      } 
     }); 
} 

ниже мой сервлет код. здесь я получаю файл как null. Я считаю, что я должен получить файл как строку здесь. может кто-нибудь помочь, почему?

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     System.out.println("image upload"); 
     String file = (String)request.getParameter("imageFile"); 
     System.out.println("file: " + file); 
     PrintWriter out = response.getWriter(); 
     response.setContentType("text/html"); 
     out.print(file); 


    } 

ответ

0

Попробуйте

public static BufferedImage decodeToImage(String imageString) 
{ 
    BufferedImage image = null; 
    byte[] imageByte; 
    try 
    { 
     BASE64Decoder decoder = new BASE64Decoder(); 
     imageByte = decoder.decodeBuffer(imageString); 
     ByteArrayInputStream bis = new ByteArrayInputStream(imageByte); 
     image = ImageIO.read(bis); 
     bis.close(); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
    return image; 
} 

public static String encodeToString(BufferedImage image, String type) 
{ 
    String imageString = null; 
    ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
    try 
    { 
     ImageIO.write(image, type, bos); 
     byte[] imageBytes = bos.toByteArray(); 

     BASE64Encoder encoder = new BASE64Encoder(); 
     imageString = encoder.encode(imageBytes); 

     bos.close(); 
    } 
    catch (IOException e) 
    { 
     e.printStackTrace(); 
    } 
    return imageString; 
} 

Если и при чтении файла из URL

try 
{ 
    URL url = new URL("example.com/example.txt"); 
    BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); 
    String str; 
    while ((str = in.readLine()) != null) 
    { 
     // str is one line of text; readLine() strips the newline character(s) 
    } 
    in.close(); 
} 
catch (Exception e) 
{ 
e.printStackTrace(); 
} 
1

я, наконец, нашел ответ на этот вопрос. Мне пришлось модифицировать summernote и завернутый ввод файла в форму и возвратил форму оттуда, которую я опубликовал с помощью iframe.

Я googled и нашел, что мы не можем установить имя файла динамически для ввода файла из соображений безопасности.