将本地图片或者网上图片用post方式上传到图片服务器

本文介绍了一种从网络上获取图片并将其转换为Base64编码字符串的方法,然后通过HTTP POST请求发送这些字符串到服务器。服务器端接收该字符串并解码为图片文件保存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.bj95ol.test;  
  
import java.io.BufferedReader;  
import java.io.File;  
import java.io.FileNotFoundException;  
import java.io.FileOutputStream;  
import java.io.IOException;  
import java.io.InputStream;  
import java.io.InputStreamReader;  
import java.io.OutputStreamWriter;  
import java.io.PrintWriter;  
import java.net.HttpURLConnection;  
import java.net.MalformedURLException;  
import java.net.URL;  
  
import javax.servlet.ServletInputStream;  
import javax.servlet.http.HttpServletRequest;  
  
import sun.misc.BASE64Decoder;  
import sun.misc.BASE64Encoder;  
  
public class SendImgToWeb {  
    /** 
     * 获得网络图片地址。或者图片地址 
     * @param url 
     * @return 
     */  
    public String getContentFromWeb(String url)  
    {  
        String filecontent="";  
        InputStream is=null;  
        BASE64Encoder base=new BASE64Encoder();  
        if(url.startsWith("http"))  
        {  
            try {  
                HttpURLConnection urlconn=(HttpURLConnection)new URL(url).openConnection();  
                is=urlconn.getInputStream();  
            } catch (MalformedURLException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            } catch (IOException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            }  
        }  
        int n=0;  
        byte[] b=null;  
        try {  
            while((n=is.available())>0)  
            {  
                n=is.read(b);  
                if(n==-1)break;  
                filecontent=filecontent+base.encode(b);  
                  
            }  
            is.close();  
        } catch (IOException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
        return filecontent;  
    }  
      
    /** 
     * 将图片内容用post方式发送到url中 
     * @param url 
     * @param postcontent 
     */  
      
    public void sendImgbyPost(String url,String postcontent)  
    {  
        try {  
            HttpURLConnection huc=(HttpURLConnection)new URL(url).openConnection();  
            huc.setDoInput(true);  
            huc.setDoOutput(true);  
            huc.setRequestMethod("POST");  
              
            PrintWriter pw=new PrintWriter(new OutputStreamWriter(huc.getOutputStream()));  
            pw.print(postcontent);  
            pw.close();  
              
            BufferedReader br=new BufferedReader(new InputStreamReader(huc.getInputStream()));  
            String content="";  
            String line=br.readLine();  
            while(line!=null)  
            {  
                content=content+line;  
                line=br.readLine();  
                  
            }  
              
        } catch (MalformedURLException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        } catch (IOException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
          
    }  
    /** 
     * 在服务器端获取发送过来的内容 
     * @param request 
     * @return 
     */  
    public String receiveContent(HttpServletRequest request)  
    {  
        int a = 0;  
         byte[] b = new byte[4096];  
        String result="";  
        try  
        {  
         ServletInputStream sis=request.getInputStream();  
        int line=sis.readLine(b, 0, b.length);  
        while(line!=-1)  
        {  
        result=result+new String(b,0,line);  
        line=sis.readLine(b, 0, b.length);  
        }  
        }  
        catch(Exception e)  
        {  
        e.printStackTrace();  
        }  
        return  result;  
    }  
      
    /** 
     * 将接受过来的信息生成文件 
     * @param request 
     * @param filename 
     */  
    public void createFile(HttpServletRequest request,String filename)  
    {  
        File file=new File(filename);  
        try {  
            FileOutputStream fos=new FileOutputStream(file);  
            String content=receiveContent(request);  
            BASE64Decoder base=new BASE64Decoder();  
            byte[] b=base.decodeBuffer(content);  
            fos.write(b);  
            fos.close();  
              
        } catch (FileNotFoundException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        } catch (IOException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
          
    }  
  
}  

### 回答1: 使用 C 语言上传图片到 HTTP 服务器并生成图片的 URL 需要一些步骤: 1. 创建一个 HTTP 请求,其中包含图片文件作为请求数据。 2. 将请求发送到服务器,使用 socket 编程可以实现。 3. 如果请求成功,服务器将返回一个包含图片 URL 的响应。 这个过程需要对 HTTP 协议和 socket 编程有较深的了解,代码实现也较为复杂。如果你需要实现这个功能,建议使用其他语言,例如 Python,来编写代码。 ### 回答2: 在C语言中上传图片并生成URL,可以通过以下步骤实现: 1. 首先,需要使用C语言中的网络编程库来实现HTTP请求。常用的网络编程库有libcurl、libsocket等。你可以选择其中一个库并将其包含到你的代码中。 2. 接下来,需要使用HTTP的POST方法将图片数据发送到服务器。你可以使用C语言的文件操作相关函数打开和读取图片文件,然后使用网络编程库发送HTTP请求,将图片数据作为请求的body部分发送给服务器。 3. 服务器接收到图片数据后,会将其保存到指定位置,并返回生成的URL给你的程序。你可以使用网络编程库接收服务器的返回内容,并解析出其中的URL信息。 4. 最后,你可以将生成的URL打印输出或保存到文件中。 需要注意的是,你需要根据具体的服务器接口要求来设置HTTP请求的头部、URL和请求方法等。具体的实现细节可能会根据不同的网络编程库有所不同,你需要参考相应的文档或示例代码进行调用。 值得一提的是,如果你要上传的图片较大或者服务器要求上传以分片方式进行,那么你可能需要实现文件分片读取和上传的功能,并根据服务器返回的进度和结果进行相应的处理。这就需要更高级的网络编程和文件操作知识。 希望以上的回答能够帮助到你,祝你实现上传图片并生成URL的功能成功! ### 回答3: 在C语言中,可以使用网络编程库如libcurl来实现HTTP上传图片并生成URL。 首先,需要引入libcurl库并初始化它。然后,创建一个CURL对象,设置上传URL和相关选项。 接下来,打开要上传的图片文件,读取图片内容,并将其设置为上传数据。可以使用fopen()和fread()函数来读取图片文件。 然后,设置HTTP头部,确保服务器能正确识别上传的数据类型。可以使用curl_slist_append()函数来添加头部。 接着,将所有设置完成的CURL对象传给curl_easy_perform()函数,实现上传图片操作。上传完成后,可以检查返回的HTTP状态码,确认上传是否成功。 最后,在上传成功后,可以从服务器返回的数据中解析出生成的URL。使用curl_easy_getinfo()函数获取URL相关信息,如头部字段的Location值。 解析URL时,可以使用字符串处理函数如strstr(),或者使用标准的C语言字符串操作函数如sscanf()、strtok()等。 最后,销毁CURL对象并释放资源。 总的来说,通过使用网络编程库libcurl,结合文件操作和字符串处理函数,可以在C语言中实现HTTP上传图片,并生成上传后的URL。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值