将图片上传到服务器 (Java)
Upload image to server (Java)
我想从客户端接收图像并将其保存到文件夹中。当我从 POST-MAN
收到它时,它只生成字节:
ˇÿˇ‡ JFIF H H ˇ· XExif MM * ái & † † † ± ˇÌ 8Photoshop 3.0 8BIM 8BIM % ‘ åŸè ≤ ÈÄ òϯB~ˇ¿ ± " ˇƒ
没关系,我可以收到并保存。
但是当我尝试从 IOS 接收信息时,它也在正文中向我发送了一些信息:
--Boundary+71ADC8832D9A5F95
Content-Disposition: form-data; name="file"; filename="fileName.jpg"
Content-Type: image/jpeg
ˇÿˇ‡ JFIF H H ˇ· XExif MM * ái & † † † ± ˇÌ 8Photoshop 3.0 8BIM 8BIM % ‘ åŸè ≤ ÈÄ òϯB~ˇ¿ ± " ˇƒ
如何从中获取唯一图像?
我的Java代码是:
InputStream stream = request.getInputStream();
bytes = IOUtils.toByteArray(stream);
File file = new File("myfile/1.jpg");
BufferedImage img = ImageIO.read(new ByteArrayInputStream(bytes));
ImageIO.write(img, "JPEG", file);
更新: 对于分段上传图片,我添加了代码:
if(request instanceof MultipartHttpServletRequest){
/**
* multipart
*/
MultipartHttpServletRequest mrequest = (MultipartHttpServletRequest) request;
Iterator<String> itr = mrequest.getFileNames();
MultipartFile file = mrequest.getFile(itr.next());
bytes = file.getBytes();
}
但它不是MultipartHttpServletRequest
的实例。为什么?
我找到了解决方案:
spring 和 tomcat 配置中的问题....我添加了
<Context
allowCasualMultipartParsing="true" />
在 server.xml 中 tomcat。
然后将 bean 添加到 WebConfig:
@Bean
public MultipartResolver multipartResolver() {
CommonsMultipartResolver resolver = new CommonsMultipartResolver();
resolver.setDefaultEncoding("utf-8");
return resolver;
}
试试这个代码。它对我有用。将代码放入带有 <% %> 标签的 jsp 页面本身
<%
Connection conn=null;
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
conn = DriverManager.getConnection(//your connection string//);
PreparedStatement psImageInsertDatabase=null;
PreparedStatement psImageInsertDatabase2=null;
byte[] b=null;
try{
String temp=(String)session.getAttribute("myId");
String sqlImageInsertDatabase="insert into upload_image (bImage) values (?)";
String sqlImageInsertDatabase2="UPDATE [dbo].[upload_image] SET [iImageID] = '"+temp+"' WHERE [iImageID] is null AND [bImage] is not null";
psImageInsertDatabase=conn.prepareStatement(sqlImageInsertDatabase);
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload sfu = new ServletFileUpload(factory);
List items = sfu.parseRequest(request);
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (!item.isFormField()) {
b = item.get();
}
}
psImageInsertDatabase.setBytes(1,b);
psImageInsertDatabase.executeUpdate();
psImageInsertDatabase2=conn.prepareStatement(sqlImageInsertDatabase2);
psImageInsertDatabase2.executeUpdate();
}
catch(Exception e)
{
e.printStackTrace();
response.sendRedirect("addimage.jsp");
}
%>
我想从客户端接收图像并将其保存到文件夹中。当我从 POST-MAN
收到它时,它只生成字节:
ˇÿˇ‡ JFIF H H ˇ· XExif MM * ái & † † † ± ˇÌ 8Photoshop 3.0 8BIM 8BIM % ‘ åŸè ≤ ÈÄ òϯB~ˇ¿ ± " ˇƒ
没关系,我可以收到并保存。
但是当我尝试从 IOS 接收信息时,它也在正文中向我发送了一些信息:
--Boundary+71ADC8832D9A5F95
Content-Disposition: form-data; name="file"; filename="fileName.jpg"
Content-Type: image/jpeg
ˇÿˇ‡ JFIF H H ˇ· XExif MM * ái & † † † ± ˇÌ 8Photoshop 3.0 8BIM 8BIM % ‘ åŸè ≤ ÈÄ òϯB~ˇ¿ ± " ˇƒ
如何从中获取唯一图像?
我的Java代码是:
InputStream stream = request.getInputStream();
bytes = IOUtils.toByteArray(stream);
File file = new File("myfile/1.jpg");
BufferedImage img = ImageIO.read(new ByteArrayInputStream(bytes));
ImageIO.write(img, "JPEG", file);
更新: 对于分段上传图片,我添加了代码:
if(request instanceof MultipartHttpServletRequest){
/**
* multipart
*/
MultipartHttpServletRequest mrequest = (MultipartHttpServletRequest) request;
Iterator<String> itr = mrequest.getFileNames();
MultipartFile file = mrequest.getFile(itr.next());
bytes = file.getBytes();
}
但它不是MultipartHttpServletRequest
的实例。为什么?
我找到了解决方案:
spring 和 tomcat 配置中的问题....我添加了
<Context
allowCasualMultipartParsing="true" />
在 server.xml 中 tomcat。
然后将 bean 添加到 WebConfig:
@Bean
public MultipartResolver multipartResolver() {
CommonsMultipartResolver resolver = new CommonsMultipartResolver();
resolver.setDefaultEncoding("utf-8");
return resolver;
}
试试这个代码。它对我有用。将代码放入带有 <% %> 标签的 jsp 页面本身
<%
Connection conn=null;
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
conn = DriverManager.getConnection(//your connection string//);
PreparedStatement psImageInsertDatabase=null;
PreparedStatement psImageInsertDatabase2=null;
byte[] b=null;
try{
String temp=(String)session.getAttribute("myId");
String sqlImageInsertDatabase="insert into upload_image (bImage) values (?)";
String sqlImageInsertDatabase2="UPDATE [dbo].[upload_image] SET [iImageID] = '"+temp+"' WHERE [iImageID] is null AND [bImage] is not null";
psImageInsertDatabase=conn.prepareStatement(sqlImageInsertDatabase);
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload sfu = new ServletFileUpload(factory);
List items = sfu.parseRequest(request);
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (!item.isFormField()) {
b = item.get();
}
}
psImageInsertDatabase.setBytes(1,b);
psImageInsertDatabase.executeUpdate();
psImageInsertDatabase2=conn.prepareStatement(sqlImageInsertDatabase2);
psImageInsertDatabase2.executeUpdate();
}
catch(Exception e)
{
e.printStackTrace();
response.sendRedirect("addimage.jsp");
}
%>