在java中添加图像
问题描述:
我想在JSP中添加图像和文件。我应该怎么做?在这里,我所做的形式:在java中添加图像
<div id="user_img">
<form name="form1" method="post" enctype="multipart/form-data" action="image_user_upload_db.jsp">
<input type="file" name="poster" id="imagefile"/>
<input type="submit" id="submit_img" value="submit"/>
</form>
</div>
和JSP页面,其在保存图像帮助:
try{
String ImageFile="";
String itemName = "";
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (!isMultipart){
}
else{
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List items = null;
try{
items = upload.parseRequest(request);
}
catch (FileUploadException e){
e.getMessage();
}
Iterator itr = items.iterator();
while (itr.hasNext()){
FileItem item = (FileItem) itr.next();
if (item.isFormField()){
String name = item.getFieldName();
String value = item.getString();
if(name.equals("poster")){
ImageFile=value;
}
}
else{
try{
itemName = item.getName();
File savedFile = new File(config.getServletContext().getRealPath("/")+"\\img\\user_img\\"+itemName);
item.write(savedFile);
}
catch (Exception e){
out.println("Error"+e.getMessage());
}
}
}
try{
String str="update user_info set img_name='"+itemName+"' where user_id=?";
PreparedStatement ps=con.prepareStatement(str);
ps.setInt(1,id1);
int rs1=ps.executeUpdate();
response.sendRedirect("profile.jsp");
}
catch(Exception el){
out.println("Inserting error"+el.getMessage());
}
}
}
我想这种形式采取其他输入型还可以,但我添加另一种输入类型的形式,它会给出错误。
答
你可以得到他们的价值观在这个代码细看
if (item.isFormField()){
String name = item.getFieldName();
String value = item.getString();
if(name.equals("poster")){
ImageFile=value;
}
}
得到其他字段值只是使用item.getFieldName()
然后检查它是否是你正在寻找,然后将其存储在一个字段名可变
String otherField;
if(name.equals("otherField")){
otherField = item.getString();
}
+0
在这里,它只在表单的方法是post的时候才工作,而且它没有收到任何与图像相关的东西。 – 2014-09-03 15:34:17
答
使用下面的代码在你的操作页面,
<%
String saveFile="";
String contentType = request.getContentType();
if ((contentType != null) && (contentType.indexOf("multipart/form-data") >= 0)) {
DataInputStream in = new DataInputStream(request.getInputStream());
int formDataLength = request.getContentLength();
byte dataBytes[] = new byte[formDataLength];
int byteRead = 0;
int totalBytesRead = 0;
while (totalBytesRead < formDataLength) {
byteRead = in.read(dataBytes, totalBytesRead,formDataLength);
totalBytesRead += byteRead;
}
String file = new String(dataBytes);
saveFile = file.substring(file.indexOf("filename=\"") + 10);
saveFile = saveFile.substring(0, saveFile.indexOf("\n"));
saveFile = saveFile.substring(saveFile.lastIndexOf("\\") + 1,saveFile.indexOf("\""));
int lastIndex = contentType.lastIndexOf("=");
String boundary = contentType.substring(lastIndex + 1,contentType.length());
int pos;
pos = file.indexOf("filename=\"");
pos = file.indexOf("\n", pos) + 1;
pos = file.indexOf("\n", pos) + 1;
pos = file.indexOf("\n", pos) + 1;
int boundaryLocation = file.indexOf(boundary, pos) - 4;
int startPos = ((file.substring(0, pos)).getBytes()).length;
int endPos = ((file.substring(0, boundaryLocation)).getBytes()).length;
saveFile=config.getServletContext().getRealPath("/")+"user_upload\\"+saveFile;
File ff = new File(saveFile);
FileOutputStream fileOut = new FileOutputStream(ff);
fileOut.write(dataBytes, startPos, (endPos - startPos));
fileOut.flush();
fileOut.close();
}
%>
这里'user_upload'是一个文件夹名称,其中上传的文件将被存储。
在执行此代码之前,您必须在项目目录中创建一个名为'user_upload'的文件夹。
注意: - 您可以更改文件夹名称。
答
use following code
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(MEMORY_THRESHOLD);
factory.setRepository(new File(System.getProperty("java.io.tmpdir")));
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setFileSizeMax(MAX_FILE_SIZE);
upload.setSizeMax(MAX_REQUEST_SIZE); // sets maximum size of request (include file + form data)
String uploadPath = getServletContext().getRealPath("") + File.separator + UPLOAD_DIRECTORY;
File uploadDir = new File(uploadPath);
if (!uploadDir.exists()) {
uploadDir.mkdir();
}
List<FileItem> formItems = upload.parseRequest(request);
if (formItems != null && formItems.size() > 0) {
for (FileItem item : formItems) {
if (!item.isFormField()) {
String fileName = new File(item.getName()).getName();
System.out.println("item.getFieldName() => "+item.getFieldName());
String fileAttr[] = fileName.split("\\.");
String newFileName = fileAttr[0];
int i = 1;
while (true) {
File f = new File(uploadPath + "\\" + newFileName + "." + fileAttr[1]);
if (f.exists()) {
newFileName = fileAttr[0] + i;
i++;
} else {
fileName = newFileName + "." + fileAttr[1];
break;
}
}
String filePath = uploadPath + File.separator + fileName;
File storeFile = new File(filePath);
item.write(storeFile);
request.setAttribute("message","Upload has been done successfully!");
} else {
System.out.println("1 item.getFieldName() => "+item.getFieldName());
if("description1".equalsIgnoreCase(item.getFieldName())){
//this part is for other field except file field
}
}
}
}
什么是错误? Stacktrace请求 – VinayVeluri 2014-09-03 07:18:43
没有错误,它只是不读取它,只要我在表单中使用enctype =“multipart/from-data”,它只读取图像/文件,没有别的。 – 2014-09-03 07:21:12