我允许用户上传文件,以维护主机和获得一个链接回来。一切似乎都很正常。不管我用的是
字符串itemName = item.getName();
它在Internet和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>发布于 2016-08-05 18:57:00
总结一下修复:将img = ImageIO.read(new File(itemName));更改为使用img = ImageIO.read(item.getInputStream());允许服务器访问映像的InputStream。即使Internet Explorer在FileItem的名称中提供了完整的文件路径,但它只能在文件位于服务器和客户端(例如开发环境)上完全相同的位置的环境中工作。
https://stackoverflow.com/questions/38794219
复制相似问题