Я использую summernote и хочу, чтобы загрузка сервера была асинхронно. Я планирую преобразовать изображение в base64 и отправить сервлет через ajax, там я сохраню сжатие файла и верну url файла изображения в редактор src, как показано ниже:
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);
}
Наконец я нашел ответ на этот вопрос. Мне пришлось модифицировать summernote и завернутый входной файл в форме и возвратил форму оттуда, которую я опубликовал с помощью iframe.
Я googled и нашел, что мы не можем установить имя файла динамически для ввода файла из соображений безопасности.
вы можете попробовать request.getReader()
?
Попробуй это
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();
}