我正在尝试编写一个servlet,它可以将文件从客户端上传到服务器,并将文件从服务器下载到客户端,从特定位置到特定位置.但是有两个问题阻止了我:1.当从客户端上传文件到服务器时,如何告诉服务器在哪里存储文件?2.(更重要的)如何从服务器下载到客户端部分?
这是迄今为止的代码:
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server extends Thread {
public static final int PORT = 3333;
public static final int BUFFER_SIZE = 100;
@Override
public void run() {
try {
ServerSocket serverSocket = new ServerSocket(PORT);
while (true) {
Socket s = serverSocket.accept();
saveFile(s);
}
} catch (Exception e) {
e.printStackTrace();
}
}
private void saveFile(Socket socket) throws Exception {
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
FileOutputStream fos …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过 HttpURLConnection 写入图像。
我知道如何编写文本,但在尝试编写图像时遇到了真正的问题
我已经使用ImageIO成功写入本地硬盘:
但我试图通过 ImageIO 在 url 上写入 Image 并失败
URL url = new URL(uploadURL);
connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setRequestMethod("POST");
connection.setDoInput(true);
connection.setUseCaches(false);
connection.setRequestProperty("Content-Type", "multipart/form-data;
boundary=" + boundary);
output = new DataOutputStream(connection.getOutputStream());
output.writeBytes("--" + boundary + "\r\n");
output.writeBytes("Content-Disposition: form-data; name=\"" + FIELD_NAME + "\";
filename=\"" + fileName + "\"\r\n");
output.writeBytes("Content-Type: " + dataMimeType + "\r\n");
output.writeBytes("Content-Transfer-Encoding: binary\r\n\r\n");
ImageIO.write(image, imageType, output);
Run Code Online (Sandbox Code Playgroud)
uploadURL 是服务器上的 ASP 页面的 url,该页面将使用“content-Disposition:part.txt”中给出的文件名上传图像。
现在,当我发送此信息时,ASP 页面会找到请求并找到文件名。但没有找到要上传的文件。
问题是当 ImageIO 在 URL 上写入时,ImageIO 正在写入的文件的名称是什么,
所以请帮助我 ImageIO 如何在 URLConnection 上写入图像以及我如何知道我必须在 …
java sockets urlconnection image-processing httpurlconnection
使用@MultipartConfig时,我在使用server-api 3.0时会遇到奇怪的行为.当我打电话从它的工作原理100%JSP页面servlet的,但是当我做出这个servlet调用从我自己的Java客户端(使用java.net API)我得到一个异常.下面是我的源代码和我在两种情况下得到的输出.
我正在使用Java 1.6.0,并在apache-tomcat-7.0.11上运行servlet.
Servet:
import java.io.IOException;
import java.io.InputStream;
import java.util.Collection;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
@WebServlet(urlPatterns="/MultipartUploadServlet" , name="MultipartUploadServlet")
@MultipartConfig(location="/tmp", maxFileSize = 10485760L)
public class MultipartUploadServlet extends HttpServlet{
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("MultipartUploadServlet.doPost");
try {
System.out.println("Print out the request header");
Enumeration<String> hn = req.getHeaderNames();
while(hn.hasMoreElements()) {
String n = hn.nextElement();
System.out.println(n + " [" + req.getHeader(n) + "]");
}
Collection<Part> requestParts = …Run Code Online (Sandbox Code Playgroud) 我有下一部分代码:
dCon = (HttpURLConnection) new URL(torrentFileDownloadLink).openConnection();
dCon.setRequestProperty("Cookie", "uid=" + cookies.get("uid") + ";pass=" + cookies.get("pass"));
dCon.setRequestMethod("GET");
dCon.setConnectTimeout(30000);
dCon.setDoOutput(true);
Run Code Online (Sandbox Code Playgroud)
但Wireshark显示请求方法是"POST".我做错了什么或者这只是一个错误?顺便说一句,getRequestMethod说方法是"GET",但实际上它是POST.
我用jsoup从不同页面的html源代码中提取一些信息.其中大多数是UTF-8编码的.其中一个用ISO-8859-1编码,这导致了一个奇怪的错误(在我的选择中).
包含错误的页面是:http: //www.gudi.ch/armbanduhr-metall-wasserdicht-1280x960-megapixels-p-560.html
我用以下代码读取了所需的String:
Document doc = Jsoup.connect("http://www.gudi.ch/armbanduhr-metall-wasserdicht-1280x960-megapixels-p-560.html").userAgent("Mozilla").get();
String title = doc.getElementsByClass("products_name").first().text();
Run Code Online (Sandbox Code Playgroud)
问题是字符串"HD Armbanduhr aus Metall 4GB Wasserdicht 1280X960 - 5百万像素"中的连字符.像öäü这样的正常变音符号被正确读取.只有这个单一字符,没有输出为"-" 出现问题.
我试图用out.outputSettings().charset("ISO-8859-1")覆盖(正确设置)页面编码,但这也没有帮助.
接下来,我尝试使用Charset类将字符串的编码从手动更改为utf8和iso-8859-1.也没有运气.
在使用jsoup解析html文档后,有人提示我可以尝试获取正确的字符吗?
谢谢
我必须将文件上传到服务器,该服务器只显示带有文件上传按钮的jsf网页(通过http).我必须自动化一个进程(作为java独立进程完成),它生成一个文件并将文件上传到服务器.然后,必须上传文件的服务器不提供FTP或SFTP.有没有办法做到这一点?
谢谢,里奇
我使用Java和Playframework 1.2.3创建了一个Web爬虫.现在,我想抓取一些受经典登录/密码表单保护的网页.
事实上,这就像做这个游戏测试:
@Test
public void someTestOfASecuredAction() {
Map<String, String> loginUserParams = new HashMap<String, String>();
loginUserParams.put("username", "admin");
loginUserParams.put("password", "admin");
Response loginResponse = POST("/login", loginUserParams);
Request request = newRequest();
request.cookies = loginResponse.cookies; // this makes the request authenticated
request.url = "/some/secured/action";
request.method = "POST";
request.params.put("someparam", "somevalue");
Response response = makeRequest(request);
assertIsOk(response); // Passes!
}
Run Code Online (Sandbox Code Playgroud)
但不是通过播放生成的网站,而是与外部网站.
所以,我设法使用播放网络服务器来做到这一点:
Map<String,String> params = new HashMap<String, String>();
params.put( "telecom_username",
Play.configuration.getProperty("telecom.access.user") );
params.put( "telecom_password",
Play.configuration.getProperty("telecom.access.pass") );
HttpResponse response = WS.url(loginUrl)
.setParameters(params)
.followRedirects(true)
.post();
Run Code Online (Sandbox Code Playgroud)
当我这样做时,如果我查看response.getString(),我发现在继续之前设置了cookie的重定向页面,但是,如果我得到一个受保护的页面,我仍然没有登录.它就像是cookie从未设置过,并且HttpResponse对象没有任何与cookie相关的功能,就像之前测试代码中的响应一样.
我也尝试过ws.url()上的authenticate()方法,但它也不起作用.
我真的不知道我正在尝试做什么是通过使用播放网络服务器,但我可以使用这个^^的帮助
非常感谢 …
我正在使用这一行在我的 Java 程序中打开一个流,但我认为我被真实世界的用户代理阻止了。
private InputStream is = new URL(a).openStream();
Run Code Online (Sandbox Code Playgroud)
其中 a 是包含 url 的字符串。
我可以设置用户代理的最简单方法是什么?我只是刚刚了解他们,所以任何进一步的信息将不胜感激。例如:我想将其设置为 Mozilla/5.0。我是否需要添加更多信息?如果是这样,应该包括什么以及如何包括在内?另外,这是严格允许的,因为我应该担心有关设置用户代理的任何法律问题吗?抱歉,如果这个问题没有意义,那只是因为我对用户代理(基本上是程序发送它们)知之甚少,而且我不确定您是否必须注册或其他什么 - 我已经看到 Mac 上的 Safari 添加了: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/536.26.17 (KHTML, like Gecko) Version/6.0.2 Safari/536.26.17
谢谢
Ps 我已经阅读了一个类似的问题,但我从答案中不太明白 - 我是一个 Java 初学者,才刚刚开始尝试打开文件和 url 的流。
我使用 java.net.URLConnection 使用 POST 方法将图像和一些参数发送到服务器。我下面的代码可以很好地将图像发送到服务器,但我有点困惑附加一些参数并一次发送到服务器。我已经关注了这里和这里,但我认为我的代码采用了不同的方法。
这是我的代码片段如下:
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import android.app.Activity;
import android.app.ProgressDialog;
import android.util.Log;
import android.widget.Toast;
import com.yai.app.support.DialogHandler;
public class ThreadImageUploader {
private int serverResponseCode = 0;
private ProgressDialog dialog;
private Activity activity;
public ThreadImageUploader(ProgressDialog mProgressDialog, Activity mActivity){
dialog = mProgressDialog;
activity = mActivity;
}
public int uploadFile(final String sourceFileUri, final String upLoadServerUri) {
String fileName = sourceFileUri;
HttpURLConnection conn = null;
DataOutputStream dos = null; …Run Code Online (Sandbox Code Playgroud) 我想在Java中使用http://www.imdbapi.com/,但我不知道我可以访问http响应.我尝试了以下方法:
public Map<String, String> get(String title)
{
URL url = new URL("http://www.imdbapi.com/?t=" + title);
URLConnection conn = url.openConnection();
conn.getContent();
}
Run Code Online (Sandbox Code Playgroud)