`
j2eeli
  • 浏览: 44849 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

文件上传代理服务

阅读更多

近日在工作中要用到图片服务器的功能,由于图片服务器和后台系统不在同一个域下,导致上传文件后JS无法跨域处理上传结果。解决办法就是通用的proxy方法,在后台系统写一个代理方法处理上传文件并返回结果。在Action中用流交互数据,可始终无法上传,图片服务器报500,在网上找了资料才知道输入到文件服务器的流要稍微处理下,否则协议不完整导致功能无法完成。附代码:(11-13行的POST、Connection、contentType设置非常重要)

String fileServerUrl = "http://img.aaa.com/uploadFile.jsp";   
  
InputStream is = request.getInputStream();   
String contentType = request.getContentType();   
  
URL url = new URL(fileServerUrl);   
HttpURLConnection conn = (HttpURLConnection)url.openConnection();   
conn.setDoInput(true);   
conn.setDoOutput(true);   
conn.setUseCaches(false);   
conn.setRequestMethod("POST");   
conn.setRequestProperty("Connection", "Keep-Alive");   
conn.setRequestProperty("Content-Type", contentType);   
conn.connect();   
OutputStream connOs = conn.getOutputStream();   
  
byte[] b = new byte[1024];   
int num=0;
while((num=is.read(b)) != -1){   
    connOs.write(b,0,num);   
}   
InputStream connIs=conn.getInputStream();   
BufferedReader connBr = new BufferedReader(new InputStreamReader(connIs));   
StringBuffer sb = new StringBuffer();   
String str;   
while((str=connBr.readLine())!=null){   
    sb.append(str);   
}   
log.info("结果------"+sb);   
connOs.close();   
connBr.close();   
connIs.close(); 

 

参考的源码是一个老外写的,“用JAVA程序封装一个HTTP上传请求上传文件”,参考代码如下:

import java.io.*;
import java.net.*;

public class ServletCom {

	public static void main(String[] args) throws Exception {

		HttpURLConnection conn = null;
		BufferedReader br = null;
		DataOutputStream dos = null;
		DataInputStream inStream = null;

		InputStream is = null;
		OutputStream os = null;
		boolean ret = false;
		String StrMessage = "";
		String exsistingFileName = "C:\\account.xls";

		String lineEnd = "\r\n";
		String twoHyphens = "--";
		String boundary = "*****";

		int bytesRead, bytesAvailable, bufferSize;

		byte[] buffer;

		int maxBufferSize = 1 * 1024 * 1024;

		String responseFromServer = "";

		String urlString = "http://localhost:8080/FileUpload/requestupload";

		try {
			// ------------------ CLIENT REQUEST

			FileInputStream fileInputStream = new FileInputStream(new File(
					exsistingFileName));

			// open a URL connection to the Servlet

			URL url = new URL(urlString);

			// Open a HTTP connection to the URL

			conn = (HttpURLConnection) url.openConnection();

			// Allow Inputs
			conn.setDoInput(true);

			// Allow Outputs
			conn.setDoOutput(true);

			// Don't use a cached copy.
			conn.setUseCaches(false);

			// Use a post method.
			conn.setRequestMethod("POST");

			conn.setRequestProperty("Connection", "Keep-Alive");

			conn.setRequestProperty("Content-Type",
					"multipart/form-data;boundary=" + boundary);

			dos = new DataOutputStream(conn.getOutputStream());

			dos.writeBytes(twoHyphens + boundary + lineEnd);
			dos.writeBytes("Content-Disposition: form-data; name=\"upload\";"
					+ " filename=\"" + exsistingFileName + "\"" + lineEnd);
			dos.writeBytes(lineEnd);

			// create a buffer of maximum size

			bytesAvailable = fileInputStream.available();
			bufferSize = Math.min(bytesAvailable, maxBufferSize);
			buffer = new byte[bufferSize];

			// read file and write it into form...

			bytesRead = fileInputStream.read(buffer, 0, bufferSize);

			while (bytesRead > 0) {
				dos.write(buffer, 0, bufferSize);
				bytesAvailable = fileInputStream.available();
				bufferSize = Math.min(bytesAvailable, maxBufferSize);
				bytesRead = fileInputStream.read(buffer, 0, bufferSize);
			}

			// send multipart form data necesssary after file data...

			dos.writeBytes(lineEnd);
			dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);

			// close streams

			fileInputStream.close();
			dos.flush();
			dos.close();

		} catch (MalformedURLException ex) {
			System.out.println("From ServletCom CLIENT REQUEST:" + ex);
		}

		catch (IOException ioe) {
			System.out.println("From ServletCom CLIENT REQUEST:" + ioe);
		}

		// ------------------ read the SERVER RESPONSE

		try {
			inStream = new DataInputStream(conn.getInputStream());
			String str;
			while ((str = inStream.readLine()) != null) {
				System.out.println("Server response is: " + str);
				System.out.println("");
			}
			inStream.close();

		} catch (IOException ioex) {
			System.out.println("From (ServerResponse): " + ioex);

		}

	}

}

 

分享到:
评论

相关推荐

    windows环境https服务(支持文件上传)

    windows环境https服务(支持文件上传),可用于搭建https服务,进行ssl解密/代理测试。

    Nginx文件上传模块配置

    Nginx是一个高性能的HTTP和反向代理服务器,也是IMAP/POP3/SMTP代理服务器,是由俄罗斯人lgor Sysoev开发,支持模块加载和卸载,其中upload_...我们要做的工作就是要将这两个模块加入到Nginx中,提供文件上传的服务。

    免费大文件HTTP上传组件

    3、支持大文件上传, 一次可以上传多个文件. 上传时有详细的状态显示(包括单个文件进度,整体进度,传输速率,剩余时间等) 4、提供接口全面. 可以动态设置上传保存路径, 设置允许扩展名, 允许最大大小等 5、支持...

    nginx上传文件大小报错500的解决办法

    采用nginx作反向代理,出现了一个诡异的问题,小文件可以提交,大文件会报500内部错误。这个是什么原因导致的呢?  查wiki可知,上传文件大小相关的有三个配置 client_body_buffer_size 配置请求体缓存区大小, ...

    C# 文件上传、带进度(FTP类)

    功能描述: 建立FTP链接 支持代理 多种重载的同步上传文件 多种重载的异步上传文件 多种重载的同步下载文件 多种重载的异步下载文件 上传文件的进度百分比 下载文件的进度白分比 有区分...

    Nginx安装-让文件服务器fastdfs提供有web方式的上传下载功能

    此压缩包里面包含如下安装组件: fastdfs-nginx-module_v1.15.tar.gz libevent-2.0.21-stable.tar.gz nginx_upstream_hash-master.zip nginx-1.5.9.tar.gz pcre-8.35.tar.gz

    纵横HTTP文件上传组件 v6.0.0.28

    3、支持大文件上传,一次可以上传多个文件。上传时有详细的状态显示(包括单个文件进度,整体进度,传输速率,剩余时间等)。 4、支持各种代理(HTTP, Socket4, Socket5等) 5、支持批量文件上传,用户可以一次性...

    纵横HTTP文件上传组件 v6.0.0.32

    4、支持各种代理(HTTP, Socket4, Socket5等)5、支持批量文件上传,用户可以一次性上传批量文件。客户端可以绑定表单变量,服务端并可以接收表单变量6、上传数据时会根据网络状况来控制数据包大小,避免网络堵塞。7、...

    HTTP文件上传组件

    5、支持大文件上传,一次可以上传多个文件,上传时有详细状态显示(单个文件进度,整体进度,传输速率,剩余时间等)。 6、支持各种代理(HTTP, Socket4, Socket5等) 7、客户端可以绑定表单变量,服务端并可以接收...

    Js原生ajax与跨域(代理)上传文件

    Js原生ajax与跨域(代理)上传文件:JS原生模拟ajax请求与实现ajax跨域代理上传文件和jquery跨域上传文件Dome

    bat脚本使用Putty工具sftp上传文件.zip

    使用Putty中的psftp工具实现bat脚本上传sftp文件,如果需要定时间,可自行使用Windows任务计划程序创建定时任务达到自动上传的效果

    fileUploadDemo-master_大文件上传_springboot_断点续传_

    Webupload + springboot 大文件上传

    简单的HTTP代理服务器c++语言实现

    简单实现HTTP代理服务器,上传的是vs工程文件,代码简单,仅一个源文件

    【精品】FlashFXP工具(FTP代理服务器)

    支持上传,下载,以及第三方文件续传;可以跳过指定的文件类型,只传送需要的本件;可自定义不同文件类型的显示颜色;暂存远程目录列表,支持FTP代理及Socks 3&4;有避免闲置断线功能,防止被FTP平台踢出;可显示或...

    ActiveX多文件上传插件

    1、文件上传使用增强的FTP协议,用户使用浏览器就可以上传超大文件到服务器(支持上传超过1G的文件)。 2、支持断点续传,系统智能续传未上传的文件,续传操作更简单,更方便,更快捷。 3、支持文件批量上传, 一次可以...

    Java使用SFTP上传文件到服务器的简单使用

    主要介绍了Java使用SFTP上传文件到服务器的简单使用,非常不错,具有参考借鉴价值,需要的朋友可以参考下

    java实现sftp上传下载文件

    java实现sftp上传下载文件,使用jcraft实现,含所需jar包。

    Nginx 代理转发阿里云OSS上传的实现代码

    因为小程序上传需要https,服务器https用的是letsencrypt生成的证书,但是阿里云oss没有做https(懒得上传证书),就想着用Nginx代理转发上传请求。 Nginx配置 # HTTPS server # server { listen 443 ssl; ...

    ARM32-Nginx服务,支持RTMP/HTTP-FLV推拉流,支持flv.js跨域拉流,支持web端跨域代理/上传文件

    ARM32-Nginx服务,支持RTMP/HTTP-FLV推拉流,支持flv.js跨域拉流,支持web端跨域代理/上传文件

    解决nginx+lua搭建文件上传下载服务问题

    项目需要做一个文件上传下载服务,利用 nginx+lua 做一个代理服务,上传入口统一,分发到不同的机器存储,下载链接和物理存储隔离,支持添加 agent 的方式扩容,这里主要讲一下思路和搭建配置过程,大神勿喷。...

Global site tag (gtag.js) - Google Analytics