gpt4 book ai didi

java - Android:为什么我无法将图像上传到网络服务器?

转载 作者:太空宇宙 更新时间:2023-11-04 12:27:23 24 4
gpt4 key购买 nike

我正在使用 HttpUrlConnection 将图像上传到网络服务器。当我运行应用程序并尝试上传图像时,我收到 Http 响应 200 并接收已上传的假定图像的文件名和 imageid,但是当我检查服务器时,图像未上传。文件名和 ID 现在是列表的一部分,但当我尝试检索图像时,它返回 null。

public String uploadFile(String apiPath, String filePath, String type)
{
String path = "";
String result = "";

switch (type)
{
case "M":
path = "Merchant/" + apiPath;
break;

case "C":
path = "Customer/" + apiPath;
break;
}

Log.i(ApiSecurityManager.class.getSimpleName(), m_token);

String href = "http://tysomapi.fr3dom.net/" + path + "?token=" + m_token;
Log.i(ApiSecurityManager.class.getSimpleName(), href);
try
{
String myIp = getIp();

URL url = new URL(href);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty("User-Agent", "java");

conn.setDoInput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("Content-Type", "multipart/form-data; boundary = " + boundary);
conn.setRequestProperty("X-Forwarded-For", myIp);
conn.setDoOutput(true);

File file = new File(filePath);

DataOutputStream ds = new DataOutputStream(conn.getOutputStream());
ds.writeBytes(twoHyphens + boundary + LINE_FEED);
ds.writeBytes("Content-Disposition: form-data; name=\"image\"; filename=\"" + file.getName() + "\"" + LINE_FEED);
ds.writeBytes("ContentType: image/peg" + LINE_FEED);
ds.writeBytes(twoHyphens + boundary + LINE_FEED);


FileInputStream fStream = new FileInputStream(file);

int bytesAvailable = fStream.available();

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

int bytesRead = fStream.read(buffer, 0, bufferSize);

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

ds.writeBytes(LINE_FEED);
ds.writeBytes(twoHyphens + boundary + twoHyphens + LINE_FEED);

fStream.close();
ds.flush();
ds.close();

Log.i(getClass().getSimpleName(), "Response Code: " + conn.getResponseCode());
if (conn.getResponseCode() != HttpURLConnection.HTTP_OK)
{
throw new RuntimeException("Failed : HTTP error code : "
+ conn.getResponseCode());
}

BufferedReader br = new BufferedReader(new InputStreamReader(
(conn.getInputStream())));

String output;

while ((output = br.readLine()) != null)
{
result = result + output;
}

conn.disconnect();
}

catch (
MalformedURLException e
)

{
e.printStackTrace();
}

catch (
IOException e
)

{
e.printStackTrace();
}

return result;
}

最佳答案

我能够通过使用 PrintWriter 和 OutputStream 而不是 DataOutputStream 来传递标题和图像来解决该问题。

关于java - Android:为什么我无法将图像上传到网络服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38219793/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com