我允许用户将文件上传到imgur主机并获取链接。一切似乎都正常。但是我正在使用
String itemName = item.getName();
它在Internet Explorer和Eclipse浏览器中运行良好。但是,当涉及到firefox和chrome时,由于浏览器安全性,因此只在输入字段中检索文件名。 让它发挥作用的解决方法是什么?
我的代码: -
private void processlist(HttpServletRequest request,
HttpServletResponse response) {
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.printStackTrace();
}
Iterator itr = items.iterator();
while (itr.hasNext()) {
FileItem item = (FileItem) itr.next();
if (item.isFormField()) {
} else {
try {
String itemName = item.getName();
BufferedImage img = null;
try {
img = ImageIO.read(new File(itemName));
} catch (IOException e) {
}
String IMGUR_POST_URI = "https://api.imgur.com/3/upload";
String IMGUR_API_KEY = "mykeyyyyyyyyyyyy";
String projectname = "";
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
System.out.println("Writing image...");
ImageIO.write(img, "png", baos);
URL url = new URL(IMGUR_POST_URI);
System.out.println("Encoding...");
String data = URLEncoder.encode("image", "UTF-8") + "=" + URLEncoder
.encode(Base64.encodeBase64String(baos.toByteArray()).toString(), "UTF-8");
data += "&" + URLEncoder.encode("key", "UTF-8") + "="
+ URLEncoder.encode(IMGUR_API_KEY, "UTF-8");
System.out.println("Connecting...");
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestProperty("Authorization", "Client-ID " + IMGUR_API_KEY);
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
System.out.println("Sending data...");
wr.write(data);
wr.flush();
System.out.println("Finished.");
// just display the raw response
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
JSONObject jObject = new JSONObject(line);
JSONObject data1 = jObject.getJSONObject("data");
projectname = data1.getString("link");
if (flagAccessed == false) {
img1 = projectname;
} else {
img2 = projectname;
}
System.out.print(projectname);
我的JSP代码是一个简单的形式: -
<form action="UploadServlet" method="post" enctype="multipart/form-data" name="form1" id="form1" style="text-align:center;display:inline;">
<table border="1" style="text-align:center;">
<td><center>
Select image1: <input name="file" type="file" id="file" class="btn btn-dark btn-lg12">
</center></td>
</tr>
<tr>
<td><center>
Select image2: <input name="file" type="file" id="file" class="btn btn-dark btn-lg12">
</center></td>
</tr>
<tr>
<td align="center" style="margin-top: 5px;"></td>
</tr>
</table>
<br>
<br>
<input type="submit" name="Submit" value="Submit files" class="btn btn-dark btn-lg"/>
</form>
答案 0 :(得分:0)
总结修复:
将img = ImageIO.read(new File(itemName));
更改为使用img = ImageIO.read(item.getInputStream());
允许服务器访问映像的InputStream。即使Internet Explorer在FileItem的名称中提供完整的文件路径,它也只能在文件位于服务器和客户端上的完全相同位置的环境中工作,例如开发环境。