Asana Rest Api - Upload Attachment not loading image - asana

I'm having some trouble uploading an image to an asana task. I get a 200 on the response but when I navigate to the image it is not loading and appears broken.
Here is what my request header looks like:
https://app.asana.com/api/1.0/tasks/<TaskId>/attachments - Http Post
Authorization: Bearer <o-auth token>
Content-Type: multipart/form-data; boundary=ASANA_BOUNDARY
Host: app.asana.com
Accept: */*
Content-Length: 1457324
Fiddler-Encoding: UTF8
Here is what the body of my request looks like:
--ASANA_BOUNDARY
Content-Disposition: form-data; name="file"; filename="koala.jpg"
Content-Type: image/jpeg
<Raw Data>
--ASANA_BOUNDARY--
I'm not really sure why this is giving me a 200 and then no image loads. I formed my request as noted in the documentation.

Related

FormDataContentDisposition always bring undefined filename

I'm trying to create a RESTfull service using jersey to upload files.
Reading the documentation I find out that I can use FormDataContentDisposition to get the uploaded file's details.
#POST
#Path("/upload")
#Consumes(MediaType.MULTIPART_FORM_DATA)
public Response updateAccount(
#FormDataParam("file") InputStream fileInputStream,
#FormDataParam("file") FormDataContentDisposition fileDetail) {
...
}
Im using postman to test my service. The request's content made by postman is this
POST /myProject/upload HTTP/1.1
Host: localhost:8080
Authorization: Basic MToxMjM0
Cache-Control: no-cache
Postman-Token: 86255498-5aff-4b35-4b74-d7ec59759489
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryp7MA4YWxkTrZu0gW
----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="file"; filename="myFile.txt"
Content-Type: text/plain
----WebKitFormBoundaryE19zNvXGzXaLvS5C
The problem is that filename is always "undefined" and i don't know how to get the file's mime type.

DailyMotion Upload API missing file error

I am trying to upload an mp4 video to the DailyMotion Upload API. When I send the file content, I receive an error response as below.
Id = 31, Status = RanToCompletion, Method = "{null}",
Result = "{\"error\":\"missing file\",\"seal\":\"4a24a4c8a51771d9d3b8bcd4462e721b\"}"
I am using C# in .net 4.5 and have generated the following calls:
POST [[UPLOAD URL]] HTTP/1.1
Accept: */*
Content-Type: multipart/form-data; boundary="c83ccd81-39f7-4167-a8f1-74ab63eb4219"
Host: upload-01.sv6.dailymotion.com
Content-Length: 9893501
Expect: 100-continue
--c83ccd81-39f7-4167-a8f1-74ab63eb4219
Content-Disposition: form-data; name="file"; filename="TESTFILE.mp4"
Content-Type: application/octet-stream
[[[FILE BINARY]]]
I have successfully uploaded using DailyMotion's CURL sample. Using Fiddler, CURL generates the following:
POST [[UPLOAD URL]] HTTP/1.1
User-Agent: curl/7.33.0
Host: upload-02.sv6.dailymotion.com
Accept: */*
Connection: Keep-Alive
Content-Length: 9893509
Expect: 100-continue
Content-Type: multipart/form-data; boundary=------------------------a49610ec11411f2a
--------------------------a49610ec11411f2a
Content-Disposition: form-data; name="file"; filename="TESTFILE.mp4"
Content-Type: application/octet-stream
[[FILE BINARY]]
The file binary looks good and the only differences I see are the connection and User-Agent headers. Researching the Connection header, it looks like Keep-Alive is unnecessary with HTTP/1.1. I have tried several different User-Agents (Mozilla, CURL, IE) but no change in response.
I appreciate any insight into what is happening.
Thank you!
EDIT Added code:
mediatype = "video/mp4"
name = "file"
filename = "file"
data = {byte[9893291]}
public async Task UploadRequest(string mediatype, string name, string filename, byte[] data)
{
using(HttpClient httpClient = new HttpClient())
{
var requestContent = new MultipartFormDataContent();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("*/*"));
var videoContent = new ByteArrayContent(data);
videoContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data");
videoContent.Headers.ContentDisposition.Name = "\"file\"";
videoContent.Headers.ContentDisposition.FileName = filename;
videoContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/octet-stream");
requestContent.Add(videoContent, name);
Apirequest.HttpRequestMessage.Content = requestContent;
Apirequest.HttpResponseMessage = httpClient.SendAsync(Apirequest.HttpRequestMessage).Result;
Apirequest.HttpResponseMessage.EnsureSuccessStatusCode();
}
}
EDIT Updated following help
POST http://upload-02.nyc.dailymotion.com/upload?uuid=c8542d0a9be73c55fbace1ee4aa1744b&seal=4770461f7f07b4e0c15750d70bc44377 HTTP/1.1
Accept: */*
Content-Type: multipart/form-data; boundary=62fcae82-e1b2-4df3-99c4-90fad29be62d
Host: upload-02.nyc.dailymotion.com
Content-Length: 9893493
Expect: 100-continue
--62fcae82-e1b2-4df3-99c4-90fad29be62d
Content-Disposition: form-data; name="Testfile.mp4"; filename=Testfile.mp4
Content-Type: application/octet-stream
���ftypmp42���mp41mp42isom���wide���mdat!�#h!
�Ќ>��SZa��x�M�޹SZa��{�!
�ˊ��]C���I��x�8V]�F}=�_Pc1�w�d>��.�!
������hRDq��0�`D�4�QG��A��nn��û�6��ݳ���ι�τpE����s���8)�=����^�ʇ�/�N8k.��]Jr)�z���pTR�
=}.�!
[[FILE GOES ON]]
ðb ’h 'v† )ˆI 7| F3• Ršv _Ê0 kC yDÀ ‚¡] ‰¢ h ŽÂi /
×ÿ ¥ Ó
‘`Q ‘É ’Ö ’K ’Õ ’ÿ\ “ˆŠ “³Â ”"G ”7» +udta #titl ÇTestFile
--62fcae82-e1b2-4df3-99c4-90fad29be62d--
EDIT: A code example of the fix was requested. It is as follows:
videoContent.Headers.ContentDisposition.FileName = "\"" + name + "\"";
After investigation, it looks like the nginx-upload-module that is responsible for handling file uploads on our side doesn't understand quoted content boundaries in HTTP headers, which, according to the RFC1341, is not the standard way of defining boundaries in HTTP anyway. It looks like the C# library you are using to craft your request may be following the standard for the multipart/digest content type instead of the multipart/form-data (cf section 7.2.4). Please check whether this is something you have any control on or not and test again.

make HTTP Post request from blackberry java application

In my Blackberry java native application, i am making a call to a dotnet web service whose Request and Response format is defined as below. Here In response XML is being returned. I have been searching the forums and trying for 2-3 days but no success...
Request format :
POST /cinews.asmx/GetSeatLayout HTTP/1.1
Host: webservices.mclients.com
Content-Type: application/x-www-form-urlencoded
Content-Length: length
strCinews=string&strTransId1=string&lngSessionId=string&blnScreenOnTop=string&strMergeOption=string&strAreaCats=string
Response format :
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
xml

Apache benchmark multipart/form-data

i'm facing a strange problem with apache benchmark post file.
I need to stress a feature that handles file upload. So, I googled about, and found a post describing how to build a post file properly. Its contents looks like:
--1234567
Content-Disposition: form-data; name="user_id"
3
--1234567
Content-Disposition: form-data; name="file"; filename="cf_login.png"
Content-Type: image/png
[base64 encoded file content]
--1234567--
The ab line is this:
$ ab -c 1 -n 5 -v 4 -T 'multipart/form-data; boundary=1234567' -p post_file.txt http://localhost:3000/files
When ab make the requests the generated header is the following:
INFO: POST header ==
---
POST /files.json/ HTTP/1.0
Content-length: 229
Content-type: multipart/form-data; boundary=simpleboundary
Host: localhost:3000
User-Agent: ApacheBench/2.3
Accept: */*
---
LOG: header received:
HTTP/1.1 500 Internal Server Error
Content-Type: text/html; charset=utf-8
Content-Length: 13265
X-Request-Id: 9ad57d19cd71886a1bb817d00fac651b
X-Runtime: 0.015504
Server: WEBrick/1.3.1 (Ruby/1.9.3/2012-04-20)
Date: Tue, 25 Sep 2012 13:54:29 GMT
Connection: close
The expected return is a raise params.inspect, that let me see if the data is arriving to the other side. If I remove the boundary I can see data received in params, but this is not what I want. I want to get a file upload.
Anyone has a tip? I will really appreciate it.
I found the answer, and decided to share with you.
After some struggle with the post file, I decided to create a php script just to output the $_FILES and $_REQUEST variables to see if the file was built correctly. Indeed, apache receive the file perfectly and I could see the file data, and other request params.
With Rails the same doesn't occur, and after reading the documentation of HTTP 1.1 multipart topic, I realize that the problem was related to the post file format.
When you built this kind of file, you need to build it in details, and this means include all the special characters like \r and \n in the right place. The multipart does now work with "\n" at all, it needs "dos" line ending "\r\n".
So the correct post file looks like this (the \r\n is for illustration, but should be there, you know?):
--boundary_hash\r\n
Content-Disposition: form-data; name="your_form_field";\r\n
Content-Type: text/plain\r\n
\r\n
your form field data\r\n
--boundary_hash\r\n
Content-Disposition: form-data; name="another_field";\r\n
Content-Type: text/plain\r\n
\r\n
another field data\r\n
--boundary_hash\r\n
Content-Disposition: form-data; name="filename"; filename="cf_login.png"\r\n
Content-Type: image/png\r\n
\r\n
base64 file content\r\n
--boundary_hash--\r\n
When you open this file you see this actually:
--boundary_hash
Content-Disposition: form-data; name="your_form_field";
Content-Type: text/plain
your form field data
--boundary_hash
Content-Disposition: form-data; name="another_field";
Content-Type: text/plain
another field data
--boundary_hash
Content-Disposition: form-data; name="filename"; filename="cf_login.png"
Content-Type: image/png
base64 file content
--boundary_hash--
I hope that helps you.
Cheers.

Submitting a file to Desire2Learn Dropbox

Trying to submit a file to the Dropbox through PHP to a Desire2Learn Learning Suite. I don't see a field name documented to contain the file. Am I missing something?
No, you are not missing something. There is no field name for the file for dropbox submissions. Leave the name attribute as an empty string when posting the submission file.
Here’s what a submission request should look like:
POST http://{domain_name}/d2l/api/le/{version}/{org_unit}/dropbox/folders/{folder_id}/submissions/mysubmissions/?x_a={app_id}&x_b={token_id}&x_d={token_sig}&x_c={app_sig}&x_t={time} HTTP/1.1
Content-Type: multipart/mixed; boundary=8cf23611201b7ae
Host: {domain_name}
Content-Length: 775926
--8cf23611201b7ae
Content-Type: application/json
{"Text":"Here you go","HTML":null}
--8cf23611201b7ae
Content-Disposition: form-data; name=""; filename="Jellyfish.jpg"
Content-Type: image/jpeg
{binary data}
--8cf23611201b7ae--

Resources